什么时候应该在C#中使用struct而不是class?我的概念模型是当项只是值类型的集合时使用结构.一种逻辑上将它们组合在一起形成一个有凝聚力的整体的方法.
我在这里遇到了这些规则:
这些规则有效吗?结构在语义上意味着什么?
我试图找出如何读取/写入C#中的扩展文件属性,例如,您可以在Windows资源管理器中看到的注释,比特率,访问日期,类别等.任何想法如何做到这一点?编辑:我主要是读/写视频文件(AVI/DIVX/...)
用Option Strict On:
Dim theLetterA As Char = "A"
Run Code Online (Sandbox Code Playgroud)
返回有关将字符串转换"A"为a 的错误Char.
输入Char文字的语法是什么?
举个例子,为什么大多数LINQ运算符都接受Expression<Func<TSource>>它的等价物Func<TSource>呢?
使用泛型Expression类而不是直接lambda语法的好处/原因是什么?
我过去从不需要使用不安全的东西,但是现在我需要它来处理一个操纵位图的指针.
我找不到任何其他方面的文档,但我想更好地理解不安全是如何工作的,如果在循环内部或外部使用它会有什么不同.
做得更好:
unsafe
{
for (int x = 0; x < maxX; x++)
{
for (int y = 0; y < maxY; y++)
{
//Unsafe pointer operations here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
还是做?:
for (int x = 0; x < maxX; x++)
{
for (int y = 0; y < maxY; y++)
{
unsafe
{
//Unsafe pointer operations here.
}
}
}
Run Code Online (Sandbox Code Playgroud) .NET Framework 3.5中是否存在与.NET 4 Tuple等效的类?
我想使用它来从方法返回多个值,而不是创建一个struct.
我一直在编程,假设在C#4.0中调用方法时,为参数提供名称不会影响结果,除非这样做是"跳过"一个或多个可选参数.
所以我发现以下行为有点惊讶:
给定一个获取a的方法Func<T>,执行它并返回结果:
public static T F<T>(Func<T> f)
{
return f();
}
Run Code Online (Sandbox Code Playgroud)
以及上述方法可见的另一种方法:
static void Main()
{
string s;
Run Code Online (Sandbox Code Playgroud)
调用F(没有命名参数)编译没有任何问题:
s = F<string>(() => "hello world"); // with explicit type argument <string>
s = F(() => "hello world"); // with type inference
Run Code Online (Sandbox Code Playgroud)
当使用命名参数时......
s = F<string>(f: () => "hello world");
Run Code Online (Sandbox Code Playgroud)
...使用显式类型参数的上述代码行仍然可以编译而没有问题.也许并不太令人惊讶,如果安装了ReSharper,它将表明"类型参数规范是多余的".
但是,删除类型参数时...
s = F(f: () => "hello world");
Run Code Online (Sandbox Code Playgroud)
C#编译器将报告此错误:
无法从用法推断出方法'Program.F(System.Func)'的类型参数.尝试显式指定类型参数.
对于命名参数和类型推断之间的这种交互,是否有逻辑解释?
这种行为是否记录在语言规范的某处?
我明白,根本没有必要为这个论点命名.但是,我在一个更复杂的场景中发现了这种行为,我认为在我的方法调用中为参数命名以用于内部文档目的可能是有意义的.我不是问如何解决这个问题.我试图理解一些语言的细节.
为了使事情更有趣,我发现以下所有编译都没有问题:
Func<string> func = () => "hello world";
s = F<string>(func);
s = F(func); …Run Code Online (Sandbox Code Playgroud) 我给自己写了一个小的下载应用程序,这样我就可以轻松地从我的服务器中获取一组文件,并将它们全部放到一台干净安装Windows的新电脑上,而无需实际上网.不幸的是我在创建我想要放入的文件夹时遇到问题,我不确定如何去做.
我希望我的程序能够下载应用程序 program files\any name here\
所以基本上我需要一个函数来检查文件夹是否存在,如果不存在则创建它.
在.NET中,以下语句返回不同的值:
Response.Write(
TimeZoneInfo.ConvertTime(
DateTime.Parse("2010-07-01 5:30:00.000"),
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))
);
// displays 7/1/2010 1:30:00 PM
Run Code Online (Sandbox Code Playgroud)
..还有这个...
Response.Write(
TimeZoneInfo.ConvertTime(
DateTime.Parse("2010-07-01 5:30:00.000"),
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
TimeZoneInfo.FindSystemTimeZoneById("UTC"))
);
// displays 7/1/2010 12:30:00 PM
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我认为UTC和GMT标准时间相当.
更新
经过进一步测试,我发现以下内容似乎是等效的:
"世界标准时间"
"格林威治标准时间"
"摩洛哥标准时间"
而在夏季,以下情况有所不同:
"GMT标准时间"
也许我的问题应该是,为什么"格林威治标准时间"和"格林威治标准时间标准时间"有所不同?
结束更新
我Call在VB/VBA中调用subs时使用关键字.我知道这是可选的,但是使用它还是不让它更好?我一直以为它更明确,但也许只是噪音.
另外,我在另一个论坛上看到了这个:使用Call关键字更快,因为它知道它不会返回任何值,因此它不需要设置任何堆栈空间来为返回值腾出空间.