字符串和C#中的字符串有什么区别?

字符串和C#中的字符串有什么区别?,c#,.net,string,types,alias,C#,.net,String,Types,Alias,示例(请注意案例): string s=“你好,世界!”; String s=“你好,世界!”; 使用每种方法的指导原则是什么?有什么区别呢?是C#for的别名。 所以从技术上讲,没有区别。就像 就指导原则而言,通常建议在引用对象时使用string e、 g 同样,我认为如果需要专门引用该类,通常建议使用String e、 g 这是微软倾向于使用的风格。 这方面的指导可能已经改变,因为现在强制使用C特定的别名。System.String是.NET字符串类-在C中,String是System.S

示例(请注意案例):

string s=“你好,世界!”;
String s=“你好,世界!”;
使用每种方法的指导原则是什么?有什么区别呢?

是C#for的别名。
所以从技术上讲,没有区别。就像

就指导原则而言,通常建议在引用对象时使用
string

e、 g

同样,我认为如果需要专门引用该类,通常建议使用
String

e、 g

这是微软倾向于使用的风格。
这方面的指导可能已经改变,因为现在强制使用C特定的别名。

System.String
是.NET字符串类-在C
中,String
System.String
的别名-因此在使用中它们是相同的

至于指导原则,我不会陷入太多的泥沼,只使用你喜欢的东西——生活中有更重要的东西,代码无论如何都是一样的


如果您发现自己在构建系统时需要指定正在使用的整数的大小,因此倾向于使用
Int16
Int32
UInt16
UInt32
等。然后使用
String
看起来可能更自然-在不同的.net语言之间移动时,可能会使事情更容易理解-否则我会使用String和int。

小写
String
System.String
的别名。 它们在
C#
中是相同的


关于是否应该使用系统类型(
System.Int32
System.String
等)或
C#alias
int
String
等)存在争议。我个人认为您应该使用
C#别名,但这只是我个人的偏好。

我所听到的关于在C#中使用提供的类型别名的最佳答案来自Jeffrey Richter在他的书中。以下是他的三个理由:

  • 我看到许多开发人员感到困惑,不知道是在代码中使用string还是string。因为在C#中,字符串(一个关键字)正好映射到System.string(一种FCL类型),所以两者之间没有区别,可以使用任何一种
  • 在C#中,long映射到System.Int64,但在另一种编程语言中,long可以映射到Int16Int32。事实上,C++/CLI确实将long视为Int32。如果阅读一种语言的源代码的人习惯于使用另一种编程语言编程,那么他或她很容易误解代码的意图。事实上,大多数语言甚至不会将long作为关键字,也不会编译使用它的代码
  • FCL有许多方法,它们的方法名中包含类型名。例如,BinaryReader类型提供了诸如ReadBooleanReadInt32ReadSingle等方法,以及系统。Convert类型提供了诸如ToBooleanToInt32ToSingle等方法。尽管编写以下代码是合法的,但我觉得带有float的行非常不自然,而且这行是否正确并不明显:

好了。我认为这些都是很好的观点。然而,我发现自己并没有在自己的代码中使用Jeffrey的建议。也许我太沉迷于我的C#世界了,但我最终试图让我的代码看起来像框架代码。

这是一个惯例问题,真的<代码>字符串
看起来更像C/C++风格。一般惯例是使用所选语言提供的任何快捷方式(int/int for
Int32
)。这也适用于“对象”和
decimal


理论上,这有助于将代码移植到未来的64位标准中,“int”可能意味着
Int64
,但这不是重点,为了安全起见,我希望任何升级向导都能将任何
int
引用更改为
Int32
预先设置。

出于格式化的原因,我更喜欢大写的
.NET
类型(而不是别名)。
.NET
类型的颜色与其他对象类型相同(值类型毕竟是正确的对象)

条件和控制关键字(如
if
switch
、和
return
)为小写,颜色为深蓝色(默认情况下)。我宁愿在使用和形式上没有分歧

考虑:

String someString;
另一串;

如果您对C#和VB.Net这类东西感兴趣,那么使用系统类型可以更容易地在C#和VB.Net之间进行移植。

string
string
在所有方面都是相同的(除了大写的“S”)。这两种方式都不会影响性能


在大多数项目中,小写的
string
是首选的,因为突出显示的语法
string
只是
System.string
的别名。编译器将以相同的方式处理它们


唯一的实际区别是您提到的语法突出显示,如果您使用
String
String
代表
System.String
,并且它是.NET Framework类型,则必须使用System编写
string
System.string的C语言别名。它们都被编译成IL(中间语言)中的System.String
,因此没有区别。选择你喜欢的并使用它。如果你是鳕鱼
string place = "world";
string greet = String.Format("Hello {0}!", place);
BinaryReader br = new BinaryReader(...);
float val  = br.ReadSingle(); // OK, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good
StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 
StringBuilder @string = new StringBuilder();
BinaryReader br = new BinaryReader(...);
float val = br.ReadSingle(); // OK, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good
String s = "I am String";
string s = "I am String";
string s = String.ToUpper() ;
string String = "I am a string";
 typeof(string) == typeof(String) == typeof(System.String)
class MySequence<TElement>
{
  public IEnumerable<TElement> String { get; set; }

  void Example()
  {
    var test = String.Format("Hello {0}.", DateTime.Today.DayOfWeek);
  }
}
class MyPiano
{
  protected class String
  {
  }

  void Example()
  {
    var test1 = String.Format("Hello {0}.", DateTime.Today.DayOfWeek);
    String test2 = "Goodbye";
  }
}
class TricksterString { 
  void Example() {
    String s = "Hello World"; // Okay but probably not what you expect.
  }
}

class String {
  public static implicit operator String(string s) => null;
}
string s1 = 42; // Errors 100% of the time  
String s2 = 42; // Might error, might not, depends on the code