我喜欢元组.它们允许您快速将相关信息分组在一起,而无需为其编写结构或类.这在重构非常本地化的代码时非常有用.
然而,初始化它们的列表似乎有点多余.
var tupleList = new List<Tuple<int, string>>
{
Tuple.Create( 1, "cow" ),
Tuple.Create( 5, "chickens" ),
Tuple.Create( 1, "airplane" )
};
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?我希望得到一个类似于字典初始化器的解决方案.
Dictionary<int, string> students = new Dictionary<int, string>()
{
{ 111, "bleh" },
{ 112, "bloeh" },
{ 113, "blah" }
};
Run Code Online (Sandbox Code Playgroud)
我们不能使用类似的语法吗?
我有一些担心在ASP.NET MVC中使用异步操作.当它提高了我的应用程序的性能,并且在做它不是?
我正在尝试创建一个按钮,其中包含一个图像而没有边框 - 就像Firefox工具栏按钮,然后将鼠标悬停在它们上面并查看完整按钮.
我已尝试设置BorderBrushto Transparent,BorderThicknessto 0,并尝试过BorderBrush="{x:Null}",但您仍然可以看到按钮的轮廓.
我正在使用JSON库NewtonSoft生成JSON字符串:
JObject out = JObject.FromObject(new
{
typ = "photos"
});
return out.ToString();
Run Code Online (Sandbox Code Playgroud)
输出:
{
"typ": "photos"
}
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有可能将输出放在一行中,如:
{"typ": "photos"}
Run Code Online (Sandbox Code Playgroud) 我很快就想确定是否/何时触发了一组事件.因此我很快给他们分配了空的lambda.
_session.TopologyStarted += () => { };
Run Code Online (Sandbox Code Playgroud)
在触发事件时跟踪代码时,调试器进入匿名函数,允许调试它的执行.但是,在此代码行上设置断点时,会在为事件分配匿名函数时设置断点.
有没有办法在匿名函数中设置断点?
在阅读Mark Seemann的".NET中的依赖注入"后,我远离服务定位器,这是一种反模式.
在阅读MVC 4上的发行说明后,我看到:
通过DependencyResolver改进了控制反转(IoC):Web API现在使用MVC依赖解析器实现的服务定位器模式来获取许多不同设施的实例.
因此,我对于微软在2012年使用服务定位器的原因感到好奇和困惑.
dependency-injection ioc-container service-locator asp.net-mvc-4
Lambdas很不错,因为它们提供简洁和局部性以及额外形式的封装.而不必编写只使用一次可以使用lambda的函数.
在想知道它们是如何工作的时候,我直觉地认为它们可能只创建过一次.这激发了我创建一个解决方案,该解决方案允许通过使用lambda作为其创建范围的标识符,将类成员的范围限制在私有范围之外.
这种实现虽然可能有些过分(仍在研究它),但可以证明我的假设是正确的.
一个较小的例子:
class SomeClass
{
public void Bleh()
{
Action action = () => {};
}
public void CallBleh()
{
Bleh(); // `action` == {Method = {Void <SomeClass>b__0()}}
Bleh(); // `action` still == {Method = {Void <SomeClass>b__0()}}
}
}
Run Code Online (Sandbox Code Playgroud)
lambda会返回一个新实例,还是保证总是相同?
System程序命名空间中有一个命名空间.结果我无法System从我的内部看到标准命名空间.我该如何解决这个问题?

例如,在C++中,有一个::运算符将我"移出"我的命名空间,因此我可以看到与我当前命名空间同名的外部命名空间:

C#中是否有类似的运算符?
今天我偶然发现了一个有趣的错误.我有一组属性可以通过一般的setter设置.这些属性可以是值类型或引用类型.
public void SetValue( TEnum property, object value )
{
if ( _properties[ property ] != value )
{
// Only come here when the new value is different.
}
}
Run Code Online (Sandbox Code Playgroud)
在为此方法编写单元测试时,我发现值类型的条件始终为真.我花了很长时间才弄清楚这是由于拳击/拆箱.我没有花太多时间将代码调整为以下内容:
public void SetValue( TEnum property, object value )
{
if ( !_properties[ property ].Equals( value ) )
{
// Only come here when the new value is different.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我对这个解决方案并不完全满意.我想保留一个简单的参考比较,除非该值被加框.
我想到的当前解决方案只是要求Equals()盒装值.这样做的装箱值的检查似乎有点矫枉过正.是不是有更简单的方法?
c# ×8
lambda ×2
.net-4.0 ×1
asp.net ×1
async-await ×1
asynchronous ×1
boxing ×1
button ×1
collections ×1
delegates ×1
equality ×1
json ×1
json.net ×1
list ×1
namespaces ×1
transparency ×1
tuples ×1
unboxing ×1
wpf ×1