我反编译了一些C#7库并看到了使用的ValueTuple
泛型.是什么ValueTuples
以及为什么不Tuple
呢?
在ES6中我们可以做匿名类:
var entity = class {
}
Run Code Online (Sandbox Code Playgroud)
但我们也可以实例化它:
var entity = new class {
constructor(name) { this.name = name; }
getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo
Run Code Online (Sandbox Code Playgroud)
背后做了什么,它带来了什么好处以及它带来了什么警告?
javascript oop anonymous-function javascript-objects ecmascript-6
有没有理由只if constexpr
被包含在C++ 17中?
我能做到这一点:
template <int N>
constexpr int fib() {
if constexpr (N == 1 || N == 2) {
return 1;
} else {
return fib<N - 1>() + fib<N - 2>();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不考虑C++委员会switch constexpr
?
template <int N>
constexpr int fib() {
switch constexpr (N) {
case 1:
case 2: return 1;
default: return fib<N - 1>() + fib<N - 2>();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来好多了 switch constexpr
甚至是一个过早的编译时循环,使用for constexpr
/ while constexpr
不使用模板替换/递归模板函数展开: …
就个人而言,我只知道动态不能用于模式匹配,这被认为是一个遗憾:(
dynamic foo = 10;
switch(foo) {
case int i:
break;
}
Run Code Online (Sandbox Code Playgroud)
此外,有价值的元组/新元组不能用于模式匹配:
dynamic foo = (420, 360);
switch(foo) {
case (int, int) i:
break;
}
Run Code Online (Sandbox Code Playgroud)
它已在当前版本的C#7中删除,并已分配以供将来使用.
我不能做的其他事情是什么?
我有四个程序集,ModuleStatic,Loader以及ModuleA和ModuleB,除了可执行程序Loader之外,它们都是DLL。
在DLL ModuleStatic中:
public class ModuleStatic {
public static string Foo { get; set; } = "Foo";
}
Run Code Online (Sandbox Code Playgroud)
在Loader中,将通过Assembly.Load和AppDomain将ModuleA和ModuleB分别加载到domA和domB。如果ModuleA修改了ModuleStatic.Foo变量,则domB中的ModuleB会收到修改吗?
c# ×3
c#-7.0 ×2
.net ×1
appdomain ×1
c++ ×1
c++17 ×1
ecmascript-6 ×1
javascript ×1
oop ×1
reflection ×1
tuples ×1