相关疑难解决方法(0)

将IEnumerable转换为IEnumerable <T>

我有一个类(一个Web控件),它具有IEnumerable类型的属性,并希望使用LINQ处理该参数.

有没有办法通过反射转换/转换/调用IEnumerable <T>在编译时不知道类型?

Method void (IEnumerable source)
{
    var enumerator = source.GetEnumerator();

    if (enumerator.MoveNext())
    {
        var type = enumerator.Current.GetType();
        Method2<type>(source); // this doesn't work! I know!
    }
}

void Method2<T>(IEnumerable<T> source) {}
Run Code Online (Sandbox Code Playgroud)

c# linq

53
推荐指数
3
解决办法
3万
查看次数

为什么OfType <>比Cast <>更快?

回答以下问题: 如何将MatchCollection转换为字符串数组

鉴于两个Linq表达式:

var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
    .OfType<Match>() //OfType
    .Select(m => m.Groups[0].Value)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
    .Cast<Match>() //Cast
    .Select(m => m.Groups[0].Value)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

OfType <>由用户Alex进行基准测试,稍微快一些(并由我自己确认).

这对我来说似乎违反直觉,因为我认为OfType <>必须同时进行'is'比较 cast(T).

任何启示将被赞赏为什么这是这种情况:)

c# linq

27
推荐指数
3
解决办法
9043
查看次数

将ICollectionView转换为List <T>

我在WPF,.NET 4.0中的DataGrid控件上绑定ICollectionView的属性类型.

我用FilterICollectionView.

    public ICollectionView CallsView
    {
        get
        {
            return _callsView;
        }
        set
        {
            _callsView = value;
            NotifyOfPropertyChange(() => CallsView);
        }
    }

    private void FilterCalls()
    {
        if (CallsView != null)
        {
            CallsView.Filter = new Predicate<object>(FilterOut);
            CallsView.Refresh();
        }
    }

    private bool FilterOut(object item)
    {
       //..
    }
Run Code Online (Sandbox Code Playgroud)

Init ICollection视图:

IList<Call> source;
CallsView = CollectionViewSource.GetDefaultView(source);
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题:

例如,源数据计数为1000个项目.我使用过滤器,在DataGrid控件中我只显示200个项目.

我想将ICollection当前视图转换为IList<Call>

c# datagrid list icollectionview

11
推荐指数
2
解决办法
1万
查看次数

Linq具有安全转换和空验证

鉴于代码:

from i in this.GridViewFoo.SelectedItems
select new EmployeeEntity
{
    EmployeeID = (i as EmployeeDto).EmployeeID,
    Email = this.GetAllEmail((i as EmployeeDto).Email, (i as EmployeeDto).SecondaryEmails),
    EmployeeNumber = (i as EmployeeDto).EmployeeNumber,
    FirstName = (i as EmployeeDto).FirstName,
    LastName = (i as EmployeeDto).LastName
}
Run Code Online (Sandbox Code Playgroud)

在安全演员之后,(i as EmployeeDto)我可能会收到NullReferenceException.如何确保代码的安全性并且不会因为大量的空检而使其过载?

解决方案概述:

我做了一些测试来断言解决方案是否正常工作.两者都运作良好并带来相同的结果,你可以在这里查看.之后,我使用OfTypeSolutionletSolution进行了一些性能测试.

由于OfType解决方案平均有更好的时间,这将是答案!

c# linq nullreferenceexception

4
推荐指数
1
解决办法
2129
查看次数