我在LINQPad中尝试了以下代码并获得了以下结果:
List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s)
{
s.Trim();
});
listFromSplit.Dump();
Run Code Online (Sandbox Code Playgroud)
"a"和"b"
所以字母b没有像我期待的那样去掉白色空间......?
有人有主意吗
[注意:.Dump()方法是LINQPad中的扩展方法,它以一种漂亮的智能格式打印出任何对象的内容]
我想使用DataTableExtensions中提供的CopyToDataTable方法创建一个给定List的数据表.我之前已经问过如何将List转换为DataSet的问题?从CMS获得了一个特殊的答案,通过创建扩展来实现我想要的public static DataTable ToDataTable<T>(this IEnumerable<T> collection)
我一直在使用他的建议......但最近我在博客中看到已经存在这样的扩展...... CopyToDataTable<T>(this IEnumerable<T> source) : DataTable存在于System.Data.DataTableExtensions中.
因此,我认为我应该切换到使用这种内置的扩展方法,而不是使用我必须维护自己的方法.
不幸的是,我在弄清楚如何使用它时遇到了一些麻烦.
我可以使用我的IList并说myListofMyClass.CopyToDataTable()但是我得到一个编译错误,说"类型'MyClass'必须可以转换为'System.Data.DataRow'才能在通用中用作参数'T'方法..."
有什么特别的东西我需要做MyClass才能使它可以转换为System.Data.DataRow吗?我需要实现一些接口吗?
所以我只是从微软测试CLR Profiler,我做了一个小程序,创建了一个包含1,000,000个双打的List.我检查了堆,结果列表<>大小大约是124KB(我不记得确切,但它就在那附近).这真的震撼了我的世界,如果它有100万双打怎么可能是124KB呢?无论如何,之后我决定检查双[1000000].令我惊讶的是(因为这是我所期望的List <> = P),因此数组大小为7.6MB.巨大的差异!!
他们怎么会不一样?List <>如何管理其项目(令人难以置信)内存效率?我的意思是,它不像其他7.5 mb在其他地方,因为在我创建了100万双打之后,应用程序的大小大约增加了3或4 KB.
我试图弄清楚如何检查列表中的所有Car.SomeID中是否存在testInt
所以:
int testInt = 10;
List<Car> myCars = GetCars();
Run Code Online (Sandbox Code Playgroud)
我想看看myCards.SomeID中是否有10匹配
我有一个通用列表,我正在删除使用的项目List.Remove(Object).我一直在删除项目,但每当我到达第五项我删除它失败,并没有从列表中删除它.我删除的内容似乎并不重要,但每次我尝试删除第五项时失败的五个项目.
可能是什么导致了这个?查看文档List(Of T).Remove,它没有指定他们用于删除项目的算法.
首先,我很可能是以错误的方式处理我的问题,在这种情况下,我很乐意接受替代方案.
我想要实现的是检测USB设备连接到计算机后创建的驱动器.
这是简化的工作流程:
// Get list of removable drives before user connects the USB cable
List<string> listRemovableDrivesBefore = GetRemovableDriveList();
// Tell user to connect USB cable
...
// Start listening for a connection of a USB device
...
// Loop until device is connected or time runs out
do
{
...
} while
// Get list of removable drives after USB device is connected
List<string> listRemovableDrivesAfter = GetRemovableDriveList();
// Find out which drive was created after USB has been connected …Run Code Online (Sandbox Code Playgroud) 我是一个线程菜鸟,我正在尝试用C#(.NET 3.5 SP1)编写一个自定义线程安全通用列表类.我已经阅读了为什么线程安全集合如此困难?.在查看了类的要求后,我想我只需要安全地添加到列表中并返回列表.该示例几乎显示了我想要的所有内容,但它缺少返回列表方法,因此我编写了自己的公共方法,如下所示:
更新:基于给出的建议我已经审查了我的要求,因此将课程简化为如下:
public sealed class ThreadSafeList<T>
{
private readonly IList<T> list = new List<T>();
private readonly object lockable = new object();
public void Add(T t)
{
lock (lockable)
{
list.Add(t);
}
}
public IList<T> GetSnapshot()
{
IList<T> result;
lock (lockable)
{
result = new List<T>(list);
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud) 我没有显式转换时将列表对象转换回原始类型时遇到问题.我的目的是概括方法,以便我可以传递不同的数据库类型,如人或公司.通过反射获取值没有问题,但我需要将实际列表转换回原始类型,List<typeT>而不是List<object>我传递给它的方法.我知道以下方法:
SomeList.ConvertAll(x => (typeT)x);
SomeList.Cast<typeT>().ToList();
Run Code Online (Sandbox Code Playgroud)
但是对于这些方法,我将必须显式地转换typeT.我尝试过以下方法:
formatted1.ConvertAll(x => Convert.ChangeType(x, typeT));
Run Code Online (Sandbox Code Playgroud)
和
List<dynamic> newList = new List<dynamic>();
foreach (var p in SomeList)
{
newList.Add(Convert.ChangeType(p, typeT);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止没有成功.也许我应该有另一个游戏计划来完全概括这些方法.现在我正在通过如下列表:
public string returnJson(List<object> entity, string someString)
{
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法将强类型属性名称列表传递到一个方法,然后我可以解析并获取调用者感兴趣的属性.我想这样做的原因是有一个复制方法,仅复制用户指定的字段.现在,该方法采用一个字符串列表与Getvalues一起使用,并在反射中获取属性方法,但我想防止重构属性和开发人员未更新的字符串.
我在这里发现了这篇文章,但不幸的是,它没有列表.我可以这样做:
public static void Copy(Expression<Func<TObject>> propertiesToCopy )
{
}
Run Code Online (Sandbox Code Playgroud)
然后让来电者做
PropertyCopier<List<string>>.Copy(() => data);
Run Code Online (Sandbox Code Playgroud)
但是我必须指定调用者可以拥有的属性数量:
public static void Copy(Expression<Func<TObject>> propertiesToCopy,Expression<Func<TObject>> propertiesToCopy2, Expression<Func<TObject>> propertiesToCopy3 )
{
}
Run Code Online (Sandbox Code Playgroud)
这将允许三个属性.无论如何将它添加到List或Queryable <>以允许与调用者想要的属性一样多?我尝试使用Add in List并使用Expression
提前致谢
编辑:今晚我找到了一些文章,提到使用C#param关键字来实现这一目标.有没有更好或更有效的方法,或者这是最好的方法吗?
为什么IList这样定义?
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
public interface ICollection<T> : IEnumerable<T>, IEnumerable
public interface IEnumerable<T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
不可能只是
public interface IList<T> : ICollection<T>
Run Code Online (Sandbox Code Playgroud)
所以,为了测试我创建了这些接口,只是为了确定它是否有效!
public interface IOne
{
string One();
}
public interface ITwo : IOne
{
string Two();
}
public interface IThree : ITwo, IOne
{
string Three();
}
Run Code Online (Sandbox Code Playgroud)
虽然它很好,Resharper抱怨"冗余接口".
微软继续这个实现的任何想法?