我在集合列表中有几个对象。我需要知道从集合中删除对象时是否调用 Dispose() 方法?如果没有,当对象被删除时是否有某种方法可以调用它?
有时我有:
let a = { b: { c1: { z: false } } }
Run Code Online (Sandbox Code Playgroud)
其他时候我有:
let a = { b: { c2: { z: false } } }
Run Code Online (Sandbox Code Playgroud)
我有let n = 'c1'或let n = 'c2'
我可以这样做来传播未定义的:
a?.b[n]?.z
Run Code Online (Sandbox Code Playgroud)
但if(a.b) ...除此之外,如果b未定义,我可以做任何速记吗?
?[似乎没有,我认为我也做不到a['b'][n]?.z,因为如果没有 b 那么尝试对其进行索引n将导致无法读取 undefined 的属性 VALUE_OF_N?
我预计下面的代码会被阻塞近 5 秒,但事实并非如此。它立即打印出来。Result操作不是阻塞的吗?
class Program
{
static void Main()
{
// Return a value type with a lambda expression
Task<int> task1 = Task<int>.Factory.StartNew(() => Task.Delay(5000).Id + 100);
int i = task1.Result;
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个集合,其中一些形状可能是蓝色的。如果有蓝色形状,我想返回蓝色形状的数量。如果没有蓝色形状,我想返回所有形状的计数。这是在初始化程序中完成的,而且蓝色形状的计数又长又丑:
new SomeObject {
CountOf = someCollection.Shapes.Count(s => s.Attributes.First(a => a.Name == "Color").Value == "Blue") > 0 ?
(someCollection.Shapes.Count(s => s.Attributes.First(a => a.Name == "Color").Value == "Blue") :
someCollection.Shapes.Count()
}
Run Code Online (Sandbox Code Playgroud)
..这甚至更长,更丑陋,并且计数两次。可以通过将其设置为 Any 而不是 Count 来优化一些,但让我们假设我知道大部分时间接近末尾会有蓝色形状,因此循环 Any+Count 几乎与循环循环一样消耗资源算了,还是会丑
我可以像这样重复使用计数:
int c;
new SomeObject {
CountOf = (c = someCollection.Shapes.Count(s => s.Attributes.First(a => a.Name == "Color").Value == "Blue")) > 0 ?
c :
someCollection.Shapes.Count()
}
Run Code Online (Sandbox Code Playgroud)
..this 依靠赋值c返回赋值的值,并对其进行 bool 测试,然后我们可以c在输出中使用。我不知道有一种方法可以声明c内联到三元。(它仍然可能计数两次)
不可能使用正在初始化的属性作为三元中的临时存储,也不可能将其初始化两次(尽管它可以初始化为蓝色的计数,然后在创建后进行测试并更改为 0)并且 C# 没有任何真实性行为像JavaScript可能会被利用来挑选b的a||b …
我有一个带有构造函数的 C# 类。构造函数当前需要一个logger<myObject>. 代码如下所示:
public class MyClass
{
private ILogger<MyObject> _logger;
public MyClass(ILogger<MyOjbect> logger)
{
_logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望 ILogger 采用泛型,这样我就可以在任何我想要的地方实例化 MyClass 的实例,并传入ILogger<T>我想要的任何类型,但是,当我更改<MyObject>为时,<T>我得到:
找不到类型或命名空间“T”。您是否缺少指令或程序集引用?
意思是,我希望代码如下所示:
public class MyClass
{
private ILogger<T> _logger;
public MyClass(ILogger<T> logger)
{
_logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
并创建它:
var myClass = new MyClass(ILogger<Something> logger);
Run Code Online (Sandbox Code Playgroud) bool isMouseClicked;
bool Test;
float Number1;
float Number2;
float Number3;
isMouseClicked = true;
Number1 = -1;
Number2 = 0;
Number3 = 1;
void Update()
{
if (isMouseClicked && Number1 <= Number2 <= Number3)
{
Test = true;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,它告诉我Operator '<=' cannot be applied to operands of type 'bool' and 'float'。