【发布时间】:2013-05-13 17:17:38
【问题描述】:
假设我有以下课程:
public class Values {
public string Value1 {get;set;}
public string Value2 {get;set;}
public string Value3 {get;set;}
}
现在我想使用 IValueConverter 以特定顺序将此对象的值绑定到 GUI 组件的 ItemsSource:
public class ValuesToListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var valuesObj = (Values ) value;
yield return valuesObj.Value1;
yield return valuesObj.Value3;
yield return valuesObj.Value2;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是当我这样做时,我收到以下错误:
'Convert' 的主体不能是迭代器块,因为'object' 不是迭代器接口类型。
有没有办法在 IValueConverter 中懒惰地创建这个列表?还是我必须这样做:
return new List<string> { valuesObj.Value1, valuesObj.Value3, valuesObj.Value2 }
【问题讨论】:
-
yield语句只能出现在返回IEnumerable或IEnumerator的方法中。您可以创建一个惰性私有方法,然后从Convert返回其结果,但调用者不太可能知道如何处理返回值。我只会返回List。 -
感谢@dlev 添加私有方法有效。
标签: c# silverlight