这更像是一个文档,而不是一个真实的问题.这似乎还没有在SO上得到解决(除非我错过了),所以这里有:
想象一下包含静态成员的泛型类:
class Foo<T> {
public static int member;
}
Run Code Online (Sandbox Code Playgroud)
是否有每个特定类的成员的新实例,或者所有Foo类类只有一个实例?
可以通过以下代码轻松验证:
Foo<int>.member = 1;
Foo<string>.member = 2;
Console.WriteLine (Foo<int>.member);
Run Code Online (Sandbox Code Playgroud)
结果是什么,这种行为记录在哪里?
声明后是否可以更改数组大小?如果没有,是否有任何替代阵列?
我不想创建一个大小为1000的数组,但是当我创建它时我不知道数组的大小.
如何在一个字符串数组中,你不知道c#.NET中数组大小的位置?
String[] array = new String[]; // this does not work
Run Code Online (Sandbox Code Playgroud) 我总是被告知在数组中添加元素的方式如下:
创建数组+ 1element的空副本,然后将原始数组中的数据复制到其中,然后加载新元素的新数据
如果这是真的,那么由于内存和CPU利用率的原因,在需要大量元素活动的场景中使用数组是正确的,对吗?
如果是这种情况,你是否应该尽量避免在添加大量元素时尽可能多地使用数组?你应该使用iStringMap吗?如果是这样,如果您需要两个以上的维度并且需要添加大量元素添加,会发生什么.你刚刚受到性能打击还是应该使用其他东西?
我有一些代码,我正在返回一个对象数组.
这是一个简化的例子:
string[] GetTheStuff() {
List<string> s = null;
if( somePredicate() ) {
s = new List<string>(); // imagine we load some data or something
}
return (s == null) ?
new string[0] :
s.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
问题是,这有多贵new string[0]?
我应该只返回null并使调用者接受null作为指示"未找到任何内容"的有效方式吗?
注意:这是在一个循环中调用的,它会运行数百次,所以这是我认为这种优化实际上并不"过早"的少数情况之一.
PS:即使它还为时过早,我仍然想知道它是如何工作的:-)
最初当我问它是否使用了任何空间时,我从'C/C++'的角度思考问题,有点像在C中,写入char a[5];将在堆栈上分配5个字节的空间,char b[0];并将分配0个字节.
我意识到这不适合.NET世界,但我很好奇,如果这是编译器或CLR将检测和优化的东西,因为一个大小为零的不可调整大小的数组真的不应该(至于我可以看到?)需要任何存储空间.
当我输入以下代码时:
object[] objects = new object[] { };
Run Code Online (Sandbox Code Playgroud)
Visual Studio告诉我:
避免不必要的零长度分配。请改用Array.Empty()。
使用一个在另一个之上有任何实际含义吗?
警告的原因是什么?
如何在具有类型的 Windows 注册表中创建一个空值REG_NONE?
例如,对于这个键:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
.htm\OpenWithProgids
Run Code Online (Sandbox Code Playgroud)
以下是我在 Windows 7 机器上看到的值:
----------------------------------------------------
Name Type Data
----------------------------------------------------
(Default) REG_SZ (value not set)
FirefoxHTML REG_NONE (zero-length binary value)
htmlfile REG_NONE (zero-length binary value)
----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
具体来说,我如何声明和初始化“零长度二进制值”类型的变量以将其传递给RegistryKey.SetValue?请注意,我在RegistryValueKind枚举的文档中找不到所需的帮助。
前段时间开始学习C#,一直听说如果没有数组的大小,就应该一直选择list,因为没有大小就不能初始化数组。
话虽如此,我试图实例化一个没有大小值的新数组,它只是有效。
string Input = "1-2-3";
string[] Lista = new string[] { };
Lista = Input.Split('-');
for(int i = 0; i < Lista.Length; i++)
{
Console.WriteLine(Lista[i]);
}
Run Code Online (Sandbox Code Playgroud)
输出:1 2 3。
我真的必须选择列表而不是数组,还是一个过时的概念?