示例(注意案例):
string s = "Hello world!";
String s = "Hello world!";
Run Code Online (Sandbox Code Playgroud)
每种使用的准则是什么?有什么区别?
我总是将我的字符串初始化为NULL,认为NULL表示没有值,""或String.Empty是一个有效值.我最近看到了更多代码示例,其中String.Empty被视为默认值或不表示任何值.这让我感到很奇怪,在c#中新添加的可空类型似乎我们通过不使用NULL来表示"无值"来向后调整字符串.
您使用什么作为默认初始化程序?为什么?
编辑:根据答案,我进一步思考
避免错误处理如果值不应为null,为什么它NULL首先设置为?也许最好在发生错误的位置识别错误,而不是在代码库的其余部分覆盖错误?
避免空检查如果您厌倦了在代码中进行空检查,那么抽象空检查是不是更好?也许包装(或扩展!)字符串方法以使它们NULL安全吗?如果你经常使用String.Empty并且null正好进入你的系统会发生什么,你是否开始添加NULL检查?
我忍不住回到懒惰的意见.如果你使用''而不是null在他的数据库中使用',那么任何DBA都会狠狠地打你九种方式.我认为同样的原则适用于编程,并且应该有人打击那些使用String.Empty而不是NULL代表没有价值的人.
相关问题
我正在处理ASP.NET MVC发送Ajax到我的控制器的值,但遇到了问题。
假设我有SampleViewModel这样的:
public class SampleViewModel
{
private string _firstName = string.Empty;
public SampleViewModel()
{
_firstName = string.Empty;
}
public string FirstName
{
get { return _firstName; }
set { _firstName = value ?? string.Empty; }
}
public string LastName { get; set; }
public string FullName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器
[HttpPost]
public JsonResult ActionSubmit(SampleViewModel model)
{
var result = "";
if(model.FirstName == null)
result += "\nFirstName is null";
if(model.LastName == null) …Run Code Online (Sandbox Code Playgroud) 是的,另一个NULL vs空字符串问题.
我同意NULL意味着没有设置的想法,而空字符串意味着"一个空的值".这是我的问题:如果列的默认值为NULL,我如何允许用户输入该NULL.
假设在系统上创建了一个新用户.有一个名字和姓氏字段; 姓氏不需要姓氏.创建用户时,此人将看到2个文本输入,一个用于第一个,一个用于最后一个.该人选择仅输入姓氏.第一个名称在技术上没有设置.在插入期间,我检查每个字段的长度,将所有空字段设置为NULL.
查看数据库时,我看到未设置名字.立即想到的问题是,他们可能从未见过名字字段(即因为错误).但这种情况并非如此; 如果空白,他们就离开
所以,我的问题是,如何在接收用户输入时决定何时将字段设置为NULL或空字符串?你怎么知道用户想要在没有检测焦点的情况下设置字段,或者他们是否删除了值...或......或......?
可能重复:
类型'string'必须是非可空类型才能在泛型类型或方法'System.Nullable <T>'中将其用作参数T.
正如标题所说,为什么字符串默认在C#中可以为空,但如果我想要,比如说,int或double是null,我必须明确说出来吗?
我有这个项目:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.1" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
这是主要的类:
namespace CSharp8
{
using System;
using Microsoft.Extensions.Configuration;
internal class Program
{
private static void Main()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.Build();
var appSettings = configuration.Get<AppSettings>();
}
public class AppSettings
{
public string SourceServer { get; set; }
public string TargetServer { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是appsettings.json:
{
"SourceServer": "prodtools",
"TargetServer": "qatools"
}
Run Code Online (Sandbox Code Playgroud)
在 AppSettings 的属性上,我收到此警告:
警告 CS8618 不可为 …
好的,所以我将某人的代码从VB.Net转换为C#.我想知道字符串是否设置为"",是否与设置为null相同?例如,以下代码:
string word = "";
bool boolValue = false;
if(string == null)
{
boolValue = true;
}
Run Code Online (Sandbox Code Playgroud)
那么这最终会将boolValue设置为true,还是将单词设置为""或将两个不同的东西置空?我的直觉告诉我,这是不同的.那个""只是使它成为一个空字符串.