我有一个类(一个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) 回答以下问题: 如何将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).
任何启示将被赞赏为什么这是这种情况:)
我在WPF,.NET 4.0中的DataGrid控件上绑定ICollectionView的属性类型.
我用Filter了ICollectionView.
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>
鉴于代码:
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.如何确保代码的安全性并且不会因为大量的空检而使其过载?
解决方案概述:
我做了一些测试来断言解决方案是否正常工作.两者都运作良好并带来相同的结果,你可以在这里查看.之后,我使用OfTypeSolution和letSolution进行了一些性能测试.
由于OfType解决方案平均有更好的时间,这将是答案!