我对这个小C#quirk感到有点难过:
给定变量:
Boolean aBoolValue;
Byte aByteValue;
Run Code Online (Sandbox Code Playgroud)
以下编译:
if (aBoolValue)
aByteValue = 1;
else
aByteValue = 0;
Run Code Online (Sandbox Code Playgroud)
但这不会:
aByteValue = aBoolValue ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
错误说:"不能隐式地将类型'int'转换为'byte'."
当然,这个怪物会编译:
aByteValue = aBoolValue ? (byte)1 : (byte)0;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
编辑:
使用VS2008,C#3.5
不是Java的粉丝,但Java不允许为泛型类设置类型,在这种情况下,它会将类型威胁为Object类型.但是,据我所知,C#强制设置<T>通用类必须实例化或简单使用时的类型.但是,假设我们有一个泛型类,我们需要一个不依赖于类型的静态方法<T>.
首先,我们知道它可以移动到一个单独的上下文,或者我们可以设置一个虚拟类型<T>,但作为一个编程难题,有没有办法调用它而不定义类型T?
例:
class Test<T> where T: ITestable {
...
public static void CreateTestFile(String fileName) {...}
}
Test.CreateTestFile("test.txt");
Run Code Online (Sandbox Code Playgroud)
这可以用Java完成,显然不能用C#.但我只是想确定一下.