将对象传递给实现特定接口的函数是否有成本,其中函数只接受该接口?喜欢:
Change (IEnumerable<T> collection)
Run Code Online (Sandbox Code Playgroud)
我通过:
List<T>
LinkedList<T>
CustomCollection<T>
Run Code Online (Sandbox Code Playgroud)
所有这些都实现了IEnumerable.但是当你将其中的任何一个传递给Change方法时,它们是否会被转换为IEnumerable,因此有一个演员阵容,但也有失去他们独特方法的问题等等?
编程中哪一个更好?
我不是在谈论完全排他性.对于以下内容更有用:
list<T>.Find,你得到的default(T)或你的价值,而不是ValueNotFound例外(例子).
要么
list<T>.IndexOf,你得到-1或正确的索引.
我想知道如何定义不变性?如果这些值没有公开,那么无法修改,那就够了吗?
是否可以在类型内修改值,而不是类型的客户?
或者只能在构造函数中设置它们?如果是这样,在双初始化的情况下(this在结构上使用关键字等)对于不可变类型仍然可以吗?
我怎样才能保证类型是100%不可变的?
我喜欢不变性概念,但有时我想知道,当一个应用程序不是平行的时候,应该避免让事情变得不可变吗?
当应用程序不是多线程的时,您不会受到共享状态问题的困扰,对吧?
或者不变性是像OOP这样的概念,你要么一直使用?排除基于使用/性能等因素不应该不可变的情况.
在为自己编写应用程序时,我遇到了这个问题,这个问题是适度的(可能像1-2k行).
我开始在Python 2.6中使用csv.reader,但你不能使用len它,或切片,等等.这背后的原因是什么?它当然感觉非常有限.
或者这只是以后版本中的废弃模块?
我希望有一个枚举,如:
enum FilterType
{
Rigid = "Rigid",
SoftGlow = "Soft / Glow",
Ghost = "Ghost",
}
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?有一个更好的方法吗?它将被用于一个对象的实例,它将被序列化/反序列化.它也会填充下拉列表.
基本上我想知道为什么MS决定实现一个只支持前进的枚举器:MoveNext().
MovePrevious在整个.NET框架中强制执行这个广泛使用的界面是不是更灵活?
我可以想象它使Linq.ReverseMS更容易实现并且性能更高效,但我不确定这是否会使其他事情变得更慢或者在其他任何事情上都会产生巨大的开销.
任何对此主题有更多了解的人都可以提供更多信息吗?即,优点和具有或不具有的缺点MovePrevious在IEnumerable/IEnumerable<T>.
类型如下:
class Category
{
public string Name;
public string Message;
public ObservableCollection<Category> SubCategories;
}
Run Code Online (Sandbox Code Playgroud)
它会说5个类别,其中每个类别包含0(无)到3之间的子类别.
我知道如何将非分层数据绑定到WPF TreeView,但无法弄清楚分层数据值.
我试过做:
str = ""
"".join(map(str, items))
Run Code Online (Sandbox Code Playgroud)
但它说str对象不可调用.这可以使用一条线吗?
.net ×8
c# ×8
ienumerable ×2
immutability ×2
performance ×2
python ×2
collections ×1
csv ×1
data-binding ×1
enums ×1
exception ×1
formatting ×1
interface ×1
open-source ×1
string ×1
wpf ×1