protected override void OnTextInput(TextCompositionEventArgs e)
{
e.Handled = true;
DoSomething(e.Text);
}
Run Code Online (Sandbox Code Playgroud)
如果我检查null,CA很高兴,但ReSharper说null检查将始终为false.我不确定谁更值得信赖......这似乎是ReSharper中的一个错误,因为从理论上讲,有人可以从我的类中扩展并调用此方法直接传入null.但我想我只是想仔细检查哪个工具是正确的,哪个工具有错误.
C#是否与JavaScript的||具有类似的操作 设定装置?
例如,在JavaScript中,如果我想检查值是否为null并设置默认值,我可以这样做:
function foo(val){
this.name = val || "foo";
}
Run Code Online (Sandbox Code Playgroud)
但是,当我想在C#中使用此功能时,我必须走这条路:
public Foo(string val)
{
this.name = (string.IsNullOrEmpty(val) ? "foo" : val);
}
Run Code Online (Sandbox Code Playgroud)
我知道这很小,乞丐不能选择,但是,如果可能的话,我想避免得到任何涉及疯狂黑客或扩展方法的答案.我使用三元运算符很好,但我很好奇是否有一个我错过的语言功能.
更新:
各地都有很好的答案,但是J0HN和安东在头上打了一针.在上面的示例中,C#不像JavaScript那样执行"虚假"值,因此??运算符不会考虑空字符串.
感谢您的时间和精彩的回复!
是否有更"Groovy"的方式来编写这个Groovy代码:
def myVar=(System.getProperty("props") == null)?
null : System.getProperty("props")
Run Code Online (Sandbox Code Playgroud)
逻辑是:
System.getProperty("props")为NULL,我想props成为NULL;props成为的价值System.getProperty("props")我在我的项目中使用了很多数据库数据,这些数据是在不同的类中导出的.例如,我有
transaction.Layout.Multimedia.Images.first();
Run Code Online (Sandbox Code Playgroud)
问题是这些属性不一定可用.
因此,有可能transaction.Layout为null,可能transaction.Layout.Multimedia为null,依此类推.
我目前在每个房产都使用它:
if (transaction.Layout != null)
{
if (transaction.Layout.Multimedia != null)
{
if (transaction.Layout.Multimedia.Images != null)
{
if (transaction.Layout.Multimedia.Images.count > 0)
{
var img = transaction.Layout.Multimedia.Images.first();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法可以检查所有父类以确保我需要的属性可用.这些不是我使用的唯一对象,还有其他对象也有完全不同的名称.
提前致谢
是否可以编写类似这样的内容并避免检查元素是否为空且集合不为空:
response.getBody()
.getRequestInformation()
.getRequestParameters().get(0)
.getProductInstances().get(0)
.getResultParameters()
Run Code Online (Sandbox Code Playgroud)
我找到了这样的东西 http://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/
基本上,我想要实现的是避免if多个检查天气对象的语句为null或者层次结构中的集合为空.我从上面的帖子中读到,这可以通过可选"Null检查在引擎盖下自动处理".
如果已经有一些解决方案,抱歉复制,请转介给我.
我有以下代码:
IList<object> testList = null;
...
if (testList != null) // <- how to get rid of this check?
{
foreach (var item in testList)
{
//Do stuff.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,以避免在if之前foreach?我看到了一些解决方案,但是使用时List,有解决方案IList吗?
在本文中,通过使用计数器替换finders来避免Null Checks, 作者给出了一个Ruby示例以避免空检查,如果返回该对象则运行该块,如果不是则则不运行.
data_source.person(id) do |person|
person.phone_number = phone_number
data_source.update_person person
end
Run Code Online (Sandbox Code Playgroud)
我想在C#中使用lambda函数做同样的事情,但是遇到一个做相同类型事情的例子时遇到了麻烦.你会创建对象工厂来接受id号和lambda函数吗?
我正在使用.NET Core构造函数注入。在一位同事的代码审查中,他提出了一个问题,即我是否应该检查控制器中注入的依赖项的空值。
由于该框架负责创建服务的实例,因此在我看来,它将处理所有错误,并且永远不会将空值依赖项传递给构造函数。不过,我没有任何事实证据,因此我想知道是否有必要进行null检查。
例如,是否应该检查以下代码中的“ myService”是否为null?(假设代码配置为使用DI)
public class MyController
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
}
Run Code Online (Sandbox Code Playgroud) c# dependency-injection constructor-injection null-check .net-core
有了新的 C# 8 功能,现在对于这个代码结构有一个捷径:
if (App.selectedPhrases == null)
App.selectedPhrases = App.DB.GetSelectedPhrases();
Run Code Online (Sandbox Code Playgroud) 我有以下代码,
bool HasPassed= (result!= null && result.Identifier.Equals("Passed"))? true : false
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我想知道是否可以以更好、更简化的方式编写这段代码,也许使用?运算符(或空合并运算符)。我仍在学习这一点,不太明白在这种情况下如何使用它。以下是一个用于测试的最小项目,非常感谢任何建议!
Result result = new Result();
//result.Identifier = "Passed";
result = null;
bool HasPassed = (result != null && result.Identifier.Equals("Passed")) ? true : false;
public class Result
{
public string Identifier { get; set; }
}
Run Code Online (Sandbox Code Playgroud)