如果你有一个Point3类并且有一个方法被调用Distance,你应该像这样静态:
Point3.Distance ( p1, p2 );
Run Code Online (Sandbox Code Playgroud)
或者类似的实例方法:
this.Distance ( p );
Run Code Online (Sandbox Code Playgroud)
我意识到使用静态方法阻碍了继承和覆盖,对吧?
哪一个更好,为什么?
基本上我想知道特定命名空间中的所有类型是否实现了特定的接口IEnumerable.
我知道我能做到:
foreach type ...
if type is IEnumerable
...
Run Code Online (Sandbox Code Playgroud)
但我不想只是为了查询它是否实现了一个接口来强制转换类型,因为无论如何都会抛弃转换.
如果你有一个这样的不可变类型:
struct Point3
{
}
Run Code Online (Sandbox Code Playgroud)
和一个像来源一样的成员:
public static const Point3 Origin = new Point3 (0,0,0);
Run Code Online (Sandbox Code Playgroud)
你应该使用:
new Point3 (0,0,0)
Run Code Online (Sandbox Code Playgroud)
?
在我看来,由于这种类型无法改变,为什么有许多起源本质上是相同的?就像我们永远不会改变0,对吗?
如何为不可变类型实现相同的功能?
如果值类型被声明为可为空,那么我该如何采取预防措施呢?即如果在构造函数中我有:
public Point3 ( Point3 source )
{
this.X = source.X;
this.Y = source.Y;
this.Z = source.Z;
}
Run Code Online (Sandbox Code Playgroud)
如果来源为空,它会失败吗?
当我转到选项>字体和颜色时,缺少一些颜色选项,如用户类型.
有谁知道为什么会这样?
我也没有在"关于"对话框中看到图像.应该像对齐横幅一样位于对话框顶部的那个.
在Essential C#3.0一书中,有一部分内容如下:
"使用select()方法进行投影非常强大.我们已经看到了如何 使用Where()标准查询运算符垂直过滤集合(减少集合中的项目数).现在,通过Select()标准查询运算符,我们还可以水平减少集合 (减少列数)或完全转换数据.
Where()和Select()提供了一种仅提取当前算法所需的原始集合片段的方法."
在这种情况下,横向和纵向意味着什么?这些方法对集合的枚举方式有何不同?
我有音乐文件名,如:
Gorillaz (2001)
Gorillaz (7th State Mix) (2002)
Gorillaz (2001) (Featuring Travis)
Gorillaz (1Mix) (2003)
Gorillaz (1000) (2001)
Run Code Online (Sandbox Code Playgroud)
如何以最干净,最简单的方式解析年份?
现在我通过查找每个来解析它们'('然后确保()s 之间的字符数是4并且第一个char是1或2并且它们可以被解析,使用TryParse?
我可以使用一个正则表达式解析这些类型的字符串吗?
这一年最长可达50-60岁,因此不超过1950年.
如果有类型需要修改以满足项目要求,那么有哪些类型的限制?
通过修改我的意思:
这样做完全没问题吗?
class NewList<T> : List<T>
Run Code Online (Sandbox Code Playgroud)
为什么我不能访问它的内部T[] _items等等?
为什么他们不受保护,而是私人?
我应该为此使用合成吗?
如果它不是一个虚拟方法,你仍然可以通过ToString正常编写方法来达到同样的效果,对吧?
您甚至可以使用可选new关键字.
这会有更好的表现吗?
.net ×9
c# ×9
immutability ×1
inheritance ×1
interface ×1
linq ×1
list ×1
nullable ×1
parsing ×1
regex ×1
string ×1
struct ×1
value-type ×1