我正在尝试使用D修改注册表中的某些值,但它一直给我以下错误:
无法设置值
但是,如果我在C#中编写完全相同的代码,那么它的工作原理.它是D中的注册表模块的问题还是我使用它的方式的问题?
d
module main;
import std.windows.registry;
import std.stdio;
import core.thread;
void main() {
string languageName = "English";
string languageCode = "en_uk";
const uint languageValue = 0x00000001;
writefln("Name '%s' Code '%s' Value '%s'", languageName, languageCode, languageValue);
writeln("Press ENTER to change language.");
readln();
writefln("Changing language of Sims 2 to '%s' ...", languageName);
Thread.sleep(dur!("msecs")(2000));
string keyName;
try {
enum versions = [
"",
"Apartment Life",
"Bon Voyage",
"Celebration Stuff",
"Family Fun Stuff",
"Free Time",
"Fun with Pets Collection",
"Glamour Life Stuff", …Run Code Online (Sandbox Code Playgroud) 这会生成一个错误,指出我无法将类型转换ClassType
为T.这有什么解决方法吗?
有没有办法指定实际上可以转换为this can的类型T?
public void WorkWith<T>(Action<T> method)
{
method.Invoke((T)this);
}
Run Code Online (Sandbox Code Playgroud) 这是一个编译器错误还是有一个特定的选择原因,为什么空条件运算符不适Func用于泛型方法?
举个例子,下面的代码不能编译
public static T Test<T>(Func<T> func)
{
return func?.Invoke() ?? default(T);
}
Run Code Online (Sandbox Code Playgroud)
编译器产生的错误是 CS0023 Operator '?' cannot be applied to operand of type 'T'
我知道你可以做到这一点但是:
public static T Test<T>(Func<T> func)
{
return func != null ? func() : default(T);
}
Run Code Online (Sandbox Code Playgroud)
那为什么不允许这样呢?
Action<T>然而,进一步详细说明可以按预期工作.
public static void Test<T>(Action<T> action, T arg)
{
action?.Invoke(arg);
}
Run Code Online (Sandbox Code Playgroud)
更新(2017-01-17):
经过一些更多的研究,即使有以下几点,它也没有多大意义:
假设我们有一个类(参考类型)
public class Foo
{
public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
让我们说我们有一个 Func<int>
Func<int> fun = () => 10;
Run Code Online (Sandbox Code Playgroud)
以下作品: …