收集计数转换器

时间:2011-07-03 03:09:03

标签: c# collections count converter

如何将集合转换为计数?

当集合通过时,转换器应该能够返回计数以表示以下集合,

DictionaryObservableCollectionList

现在我有以下但不起作用,

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return ((System.Collections.ICollection)value) != null ? ((System.Collections.ICollection)value).Count : 0;
}

3 个答案:

答案 0 :(得分:2)

关联的ICollectionView具有Count属性,您可以将其数据绑定到

编辑:以下是访问相关ICollectionView

的方法

WPF系统为绑定到ItemsSource属性的集合创建ICollectionView。您还可以使用CollectionViewSource.GetDefaultView()在代码隐藏中实例化ICollectionViews。请参阅msdn.microsoft.com/en-us/library/ms752284.aspx

另请注意,如果关联的源集合支持更改通知,则Count属性将发送更改通知

答案 1 :(得分:1)

如果我们将“集合”定义为实现ICollectionICollection<T>的内容,则可以使用Count属性告诉我们集合中的元素数量,如果这是我们的需要知道。

如果我们希望根据ICollection.Count计算某些值但以某种方式修改,那么我们可以创建Generic Method来计算我们的值。例如,通用方法Convert<T>可以采用ICollection<T> value形式参数。可以使用实现ICollection<T>作为实际参数的任何东西来调用这样的函数。

因为编译器可以推断泛型类型参数,所以在调用泛型方法时我们不需要显式指定类型参数(尽管我们可以在需要时执行此操作)。

例如......

class Program
{
    static public int Convert<T>(ICollection<T> value, Type targetType, object parameter, CultureInfo culture)        {
        return value.Count;
    }

    static void Main(string[] args)
    {
        Dictionary<int, string> di = new Dictionary<int,string>();
        di.Add(1, "One");
        di.Add(2, "Two");
        di.Add(3, "Three");
        Console.WriteLine("Dictionary count: {0}", di.Count);
        Console.WriteLine("Dictionary Convert: {0}", Convert(di, null, null, null));

        ObservableCollection<double> oc = new ObservableCollection<double>();
        oc.Add(1.0);
        oc.Add(2.0);
        oc.Add(3.0);
        oc.Add(4.0);
        Console.WriteLine("ObservableCollection Count: {0}", oc.Count);
        Console.WriteLine("ObservableCollection Convert: {0}", Convert(oc, null, null, null));

        List<string> li = new List<string>();
        li.Add("One");
        li.Add("Two");
        li.Add("Three");
        li.Add("Four");
        li.Add("Five");
        Console.WriteLine("List Count: {0}", li.Count);
        Console.WriteLine("List Convert: {0}", Convert(li, null, null, null));

        Console.ReadLine();
    }
}

答案 2 :(得分:0)

它不是ToList()的选项并获得计数吗?

static void Main(string[] args)
        {
            IDictionary<int,int> s = new Dictionary<int, int>();
            ObservableCollection<int> s1 = new ObservableCollection<int>();
            IList<int> s2 = new List<int>();

            int count = GetCount(s.ToList());
            int count1 = GetCount(s1.ToList());
            int count2 = GetCount(s2.ToList());

        }


 private static int GetCount(ICollection s)
        {
            return s.Count;
        }