Jaký je rozdíl mezi řetězce a řetězec v C #?

hlasů
5k

Příklad ( poznámka případ ):

string s = Hello world!;
String s = Hello world!;

Jaké jsou pokyny pro používání každé? A jaké jsou rozdíly ?

Položena 10/08/2008 v 08:18
zdroj uživatelem
V jiných jazycích...                            


72 odpovědí

hlasů
4k

stringJe alias v jazyce C # pro System.String.
Takže technicky, není žádný rozdíl. Je to jako int vs. System.Int32 .

Co se týče obecných zásad, je to obecně doporučuje použít stringkdykoliv máte na mysli objektu.

např

string place = "world";

Stejně tak si myslím, že to je obecně doporučuje použít String, pokud je třeba odkázat konkrétně na třídě.

např

string greet = String.Format("Hello {0}!", place);

To je styl, který Microsoft má tendenci používat ve svých příkladech .


Zdá se, že vedení v této oblasti mohlo změnit, protože StyleCop nyní prosazuje používání konkrétních aliasů C #.

Odpovězeno 10/08/2008 v 08:22
zdroj uživatelem

hlasů
2k

Jen pro úplnost, tady je mozek výpis souvisejících informací ...

Jak si všimli jiní, stringje alias System.String. Sestavují ke stejnému kódu, takže v době provádění není žádný rozdíl vůbec. To je jen jeden z aliasů v jazyce C #. Kompletní seznam je:

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char

Na rozdíl od stringa object, aliasy jsou všechny typy hodnot. decimalJe typ hodnoty, ale ne primitivní typ v CLR. Jediné primitivní typ, který nemá alias je System.IntPtr.

Ve specifikaci, typ hodnoty aliasů jsou známy jako „jednoduché typy“. Literály mohou být použity pro konstantní hodnoty každého jednoduchého typu; žádné jiné typy hodnot jsou doslovné formy k dispozici. (Porovnejte to s VB, který umožňuje DateTimeliterals a má alias pro něj příliš.)

Existuje jedna okolnost, ve které budete muset použít aliasy: když explicitně určením základní typ ENUM je. Například:

public enum Foo : UInt32 {} // Invalid
public enum Bar : uint   {} // Valid

Je to jen otázka toho, jak spec definuje prohlášení enum - část po tlustého střeva musí být na integrální typu produkce, což je jeden token sbyte, byte, short, ushort, int, uint, long, ulong, char... na rozdíl od typu produkce as použitý deklarace proměnných např. Neindikuje žádný jiný rozdíl.

A konečně, pokud jde o službu, kterou využijí: Já osobně používat aliasy všude na realizaci, ale typ CLR pro všechny API. Je to opravdu nezáleží na tom příliš mnoho, který používáte, pokud jde o realizaci - soulad mezi vašeho týmu je hezké, ale nikdo jiný se bude starat. Na druhou stranu, je to opravdu důležité, že pokud se vztahují k typu v API, můžete tak učinit v jazykovém neutrálním způsobem. Metoda s názvem ReadInt32je jednoznačné, zatímco metoda zvaná ReadIntvyžaduje výklad. Volající může být pomocí jazyka, které definuje intalias Int16, např. .NET Framework designéři postupovaly podle tohoto vzoru, dobré příklady jsou v BitConverter, BinaryReadera Converttříd.

Odpovězeno 18/10/2008 v 19:52
zdroj uživatelem

hlasů
590

Stringznamená System.Stringa je to .NET Framework typu. stringJe alias v jazyce C # pro System.String. Oba jsou sestaveny na System.StringIL (Intermediate Language), takže není žádný rozdíl. Vyberte si, co se vám líbí a použít. Máte-li kód v jazyce C #, tak bych raději string, protože je to C # typu alias a dobře známá C # programátory.

Mohu říci totéž o ( int, System.Int32) atd ..

Odpovězeno 18/10/2008 v 18:25
zdroj uživatelem

hlasů
391

Nejlepší odpověď jsem asi pomocí dodaných typ aliasy v jazyce C # slyšel pochází z Jeffrey Richter ve své knize CLR Via C # . Zde jsou jeho 3 důvody:

  • Viděl jsem řadu vývojářů zmatené a neví, zda se má použít řetězec nebo řetězec ve svém kódu. Vzhledem k tomu, v C # řetězec (klíčové slovo) mapuje přesně System.String (typ FCL), není žádný rozdíl a lze použít obě možnosti.
  • V jazyce C #, dlouhé mapuje System.Int64 , ale v jiném programovacím jazyce, dlouho by map na int16 nebo Int32 . Ve skutečnosti, C ++ / CLI se ve skutečnosti považovat dlouho jako Int32 . Někdo čte zdrojový kód v jednom jazyce by mohl snadno překroutit záměr kód, pokud on nebo ona se používá k programování v jiném programovacím jazyce. Ve skutečnosti většina jazyků nebude ani považovat dlouho jako klíčové slovo a nebude kompilovat kód, který ji používá.
  • FCL má mnoho metod, které mají názvy typu jako součást jejich názvy metod. Například BinaryReader typu nabízí metody, jako je readBoolean , ReadInt32 , ReadSingle , a tak dále, a System.Convert typu nabízí metody, jako je ToBoolean , ToInt32 , ToSingle , a tak dále. I když je to legální psát následující kód, linka s plovákem cítí velmi nepřirozené ke mně, a to není jasné, že linka je v pořádku:
BinaryReader br = new BinaryReader(...);
float val  = br.ReadSingle(); // Ok, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good

Tak tady to máte. Myslím si, že to všechno jsou opravdu dobré body. Já však nepovažuji sám pomocí Jeffreyho rady ve svém vlastním kódu. Možná jsem příliš uvízl v mém C # světě, ale jsem skončit se snaží, aby můj kód vypadat jako rámcové kódu.

Odpovězeno 16/08/2008 v 00:00
zdroj uživatelem

hlasů
365

stringje vyhrazené slovo, ale Stringje jen název třídy. To znamená, že stringnelze použít jako název proměnné sama o sobě.

Pokud z nějakého důvodu jste chtěli proměnnou s názvem řetězce , měli byste vidět pouze první z těchto kompilacemi:

StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 

Pokud opravdu chcete název proměnné s názvem řetězec můžete použít @jako prefix:

StringBuilder @string = new StringBuilder();

Dalším důležitým rozdílem: přetečení zásobníku je zvýrazní jinak.

Odpovězeno 24/02/2009 v 06:14
zdroj uživatelem

hlasů
317

Je zde jeden rozdíl - nelze použít String, aniž by using System;předem.

Odpovězeno 27/08/2008 v 19:21
zdroj uživatelem

hlasů
261

To bylo uvedené výše; však nelze použít stringv odrazu; musíte použít String.

Odpovězeno 19/10/2008 v 02:04
zdroj uživatelem

hlasů
194

System.Stringje .NET třída string - v jazyce C # stringje aliasem System.String- takže při použití jsou stejné.

Co se týče hlavních směrů bych se nedostal příliš zabřednout a stačí použít podle toho, co máte pocit, že - že jsou důležitější věci v životě a kód bude stejný jako tak.

Pokud zjistíte, sami budování systémů, kde je nutné zadat velikost celých čísel, které používáte, a tak mají tendenci používat Int16, Int32, UInt16, UInt32atd. Pak by to mohlo vypadat přirozené použít String- a při pohybu mezi různými jazyky NET by to mohlo aby srozumitelnější věci - jinak bych použít řetězec a int.

Odpovězeno 10/08/2008 v 08:26
zdroj uživatelem

hlasů
161

Dávám přednost kapitalizované .NETtypy (spíše než aliasy) pro formátování důvodů. Tyto .NETtypy jsou barevné stejně jako jiné typy objektů (typy hodnot jsou vlastní objekty, koneckonců).

Podmíněné a řídicí klíčová slova (jako je if, switcha return) jsou malá písmena a barevné tmavě modrá (ve výchozím nastavení). A já bych raději neměl nesouhlas při použití a formátu.

Zvážit:

String someString; 
string anotherString; 
Odpovězeno 03/09/2008 v 19:58
zdroj uživatelem

hlasů
160

stringa Stringjsou identické ve všech směrech (s výjimkou velkých písmen „S“). Neexistují žádné důsledky výkonu buď cestou.

Malá stringje preferováno ve většině projektů, vzhledem k zvýrazňování syntaxe

Odpovězeno 18/10/2008 v 17:50
zdroj uživatelem

hlasů
148

C # je jazyk, který se používá spolu s CLR.

string je typ v jazyce C #.

System.String je druh v CLR.

Používáte-li C # spolu s CLR stringbudou mapovány na System.String.

Teoreticky by mohla implementovat C # -compiler který generoval Java bytecode. Rozumná implementace tohoto překladače by pravděpodobně map stringse java.lang.Stringv zájmu spolupracovat s runtime knihovny Java.

Odpovězeno 17/03/2009 v 21:29
zdroj uživatelem

hlasů
134

Tento YouTube video ukazuje, prakticky, jak se liší.

Ale teď po dlouhou textovou odpověď.

Když mluvíme o .NETtam jsou dvě různé věci, kdo je .NETrámec a druhý existuje jazyky ( C#, VB.NETatd), které používají tento rámec.

zadejte popis obrázku zde

System.String“ Aka „String“ (kapitál „S“) je .NETframework datový typ, zatímco „string“ je C#datový typ.

zadejte popis obrázku zde

Stručně řečeno „String“ je alias (totéž dorovnal s různými jmény) o „řetězec“. Takže technicky i pod prohlášení, že kód bude dávat stejný výstup.

String s = "I am String";

nebo

string s = "I am String";

Stejným způsobem jsou aliasy pro jiný typ c # údajů, jak je uvedeno níže: -

Objekt: System.Object, řetězec: System.String, bool: System.Boolean, byte: System.Byte, sbyte: System.SByte, krátká: System.Int16a tak dále

Nyní je milion dolarů z bodu programátora pohledu Takže, když k použití „řetězec“ a „řetězec“?

První věc, aby nedošlo k záměně použití jednoho z nich důsledně. Ale z hlediska osvědčených postupů, když děláte deklaraci proměnné, že je to dobré používat „string“ (malý „y“) a pokud používáte jej jako název třídy a pak se dává přednost „String“ (kapitál „S“).

V níže kódu levá strana je deklarace proměnných a je prohlášen za použití „řetězec“. Na pravé straně voláme metodu tak, „String“, je rozumnější.

string s = String.ToUpper() ;
Odpovězeno 15/01/2014 v 19:03
zdroj uživatelem

hlasů
125

stringje jen alias System.String. Kompilátor bude s nimi zacházet stejně.

Jediný praktický rozdíl je zvýraznění syntaxe, jak jste zmínil, a že budete muset napsat using System, pokud používáte String.

Odpovězeno 18/10/2008 v 17:50
zdroj uživatelem

hlasů
120

Malými písmeny stringje alias System.String. Jsou stejné C#.

Tam je debata o tom, zda byste měli použít typy systém ( System.Int32, System.String, atd) typy nebo C# aliases( int, stringatd.) Osobně se domnívám, byste měli použít C# aliases, ale to je jen můj osobní preference.

Odpovězeno 10/08/2008 v 08:27
zdroj uživatelem

hlasů
113

Oba jsou stejné. Ale z kódování dispozici pokyny perspektivu, že je lepší použít stringmísto String. To je to, co obvykle používají vývojáři. například namísto použití Int32používáme intjako intje aliasInt32

FYI „Řetězec klíčové slovo je jednoduchý alias k předdefinovanou třídu System.String.“ - C # Language specifikace 4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx

Odpovězeno 18/10/2008 v 19:26
zdroj uživatelem

hlasů
96

Vzhledem k tomu, jiní říkají, že jsou stejné. Pravidla StyleCop, ve výchozím nastavení, bude prosazovat použít stringjako C # kód stylu osvědčených postupů, s výjimkou při odkazování na System.Stringstatické funkce, jako například String.Format, String.Join, String.Concatatd ...

Odpovězeno 19/10/2008 v 02:15
zdroj uživatelem

hlasů
78

Používání typů systémů usnadňuje portu mezi C # a VB.Net, pokud jste na takové věci.

Odpovězeno 22/09/2008 v 20:40
zdroj uživatelem

hlasů
73

Proti tomu, co se zdá být běžnou praxí, mimo jiné programátory, raději Stringnež stringjen upozornit na skutečnost, že Stringje referenční typ, jako Jon Skeet je uvedeno.

Odpovězeno 31/05/2011 v 12:20
zdroj uživatelem

hlasů
68

stringje alias (nebo zkratka) z System.String. To znamená, že zadáním stringjsme mysleli System.String. Si můžete přečíst více v mozkovém odkazu: ‚string‘ je alias / zkratka z System.String.

Odpovězeno 21/10/2011 v 02:10
zdroj uživatelem

hlasů
61

Řetězec ( System.String) je třída v knihovně základní třídy. string (malá písmena) je vyhrazené práce v jazyce C #, který je alias pro System.String. Int32 vs int je podobná situace jako je Boolean vs. bool. Tyto C # jazyk konkrétní klíčová slova vám umožní deklarovat primitiv ve stylu podobný C.

Odpovězeno 14/01/2012 v 23:51
zdroj uživatelem

hlasů
54

Pozdní příchod na večírek: Používám typy CLR 100% času (no, není-li nucen používat C # typu, ale nepamatuji si, kdy naposled to bylo).

Původně jsem začal dělat to před lety, podle CLR knih Ritchie. Dávalo to smysl, aby mi, že všechny CLR jazyky nakonec bude muset být schopen podporovat sadu typů CLR, takže pomocí typy CLR sami poskytované přehlednější a možná i více „opakovaně použitelné“ kód.

Teď, když jsem dělal to několik let, je to zvyk a líbí se mi, že zbarvení VS ukazuje pro typy CLR.

Jediná skutečná otrava je, že auto-complete používá Typ C #, a tak jsem skončit re-psaní automaticky generované typů je možné nastavit typ CLR místo.

Také teď, když vidím, „Int“ nebo „řetězec“, to prostě vypadá opravdu špatně se mi, jako bych při pohledu na C kód 1970.

Odpovězeno 24/08/2012 v 16:22
zdroj uživatelem

hlasů
54

Stringnení klíčové slovo a může být použit jako identifikátor, zatímco stringje klíčové slovo a nemůže být použit jako identifikátor. A do funkční hlediska jsou obě stejné.

Odpovězeno 25/04/2011 v 07:06
zdroj uživatelem

hlasů
47

Jen bych rád dodal, že se to lfousts odpověď od Ritchers knihy:

Specifikaci C # jazyk uvádí: „Jako věc stylu, používání klíčového slova je výhodnější než použití kompletního názvu typu systému.“ Já se specifikací jazyka nesouhlasí; Raději používat názvy typů FCL a zcela vyhnout názvy primitivní typ. Ve skutečnosti jsem si přál, aby kompilátory ani nabízet názvy primitivních typů a nutil vývojáře, aby místo toho používat názvy typů FCL. Zde jsou mé důvody:

Nedostal jsem svůj názor, než jsem si přečetl celý odstavec.

Odpovězeno 28/01/2011 v 11:08
zdroj uživatelem

hlasů
41

Je to věc konvence, opravdu. "String" jen vypadá spíš jako C / C ++ styl. Obecná konvence je použít jakékoliv zkratky vámi zvolený jazyk poskytl (int / INT pro Int32). To platí i pro „objekt“ a „desetinná“ stejně.

Teoreticky by to mohlo přispět k přístavu kód do nějakého budoucího 64bitové standardu, ve kterém „int“ by mohlo znamenat, Int64, ale to nejde, a já bych očekávat, že některý průvodce upgradem měnit žádná „Int“ odkazy „int32“ tak jako tak jen proto, aby být v bezpečí.

Odpovězeno 18/08/2008 v 18:58
zdroj uživatelem

hlasů
40

Není žádný rozdíl.

C # klíčové slovo stringmapuje typu .NET System.String- jedná se o alias, který udržuje konvencím pojmenování jazyka.

Stejně tak intmapuje System.Int32.

Odpovězeno 14/01/2012 v 23:47
zdroj uživatelem

hlasů
39

Nová odpověď po 6 let a 5 měsíců (otálení).

I když stringje vyhrazeno C # klíčové slovo, které má vždy pevný význam, Stringje jen obyčejný identifikátor , který by mohl odkazovat se na něco. V závislosti na členy aktuální, aktuální namespace a použité usingsměrnic a jejich umístění, Stringmůže být hodnota nebo typ odlišný od global::System.String.

I poskytne dva příklady, kdy usingsměrnice nepomůže .


Za prvé, když Stringje hodnota z aktuální (nebo lokální proměnné):

class MySequence<TElement>
{
  public IEnumerable<TElement> String { get; set; }

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

Výše uvedené nebude sestavovat, protože IEnumerable<>nemá non-statické člen volal Format, a aplikovat žádné rozšíření metody. Ve výše uvedeném případě může být stále možné použít Stringv jiných souvislostech, kde typ je syntakticky jediná možnost. Za příklad String local = "Hi mum!";by mohl být v pořádku (podle názvů a usingsměrnic).

Horší: Pravě String.Concat(someSequence)se pravděpodobně (v závislosti na usings) přejděte k metodě rozšíření Linq Enumerable.Concat. To nepůjde do statické metody string.Concat.


Za druhé, když Stringje jiný typ , vnořena aktuální:

class MyPiano
{
  protected class String
  {
  }

  void Example()
  {
    var test1 = String.Format("Hello {0}.", DateTime.Today.DayOfWeek);
    String test2 = "Goodbye";
  }
}

Ani tvrzení v Examplemetodě sestavuje. Zde Stringje vždy piano řetězec , MyPiano.String. Žádný člen ( staticnebo ne) Formatexistuje na něm (nebo se dědí ze základní třídy). A hodnota "Goodbye"nemůže být převedena do něj.

Odpovězeno 15/01/2015 v 14:21
zdroj uživatelem

hlasů
34

Tam je citát o této problematice od Daniel Solis' knihy .

Všechny předdefinované typy jsou mapovány přímo do podkladových .NET typů. Jména C # typu (String) jsou prostě aliasy pro typy .NET (String nebo System.string), takže pomocí názvů .NET funguje syntakticky, přestože se to nedoporučuje. V C # programu, měli byste používat C # jména spíše než jména .NET.

Odpovězeno 01/11/2013 v 16:21
zdroj uživatelem

hlasů
33

řetězec je klíčové slovo, a nelze použít řetězec jako identifikátor.

Řetězec není klíčové slovo a můžete jej použít jako identifikátor:

Příklad

string String = "I am a string";

Klíčové slovo string je alias System.Stringkromě problematiky klíčových slov, dva jsou přesně ekvivalentní.

 typeof(string) == typeof(String) == typeof(System.String)
Odpovězeno 11/06/2014 v 06:26
zdroj uživatelem

hlasů
33

Ano, to je žádný rozdíl mezi nimi, stejně jako booli Boolean.

Odpovězeno 08/10/2012 v 09:22
zdroj uživatelem

hlasů
30

Není žádný rozdíl mezi těmito dvěma - string, nicméně se zdá být preferovanou možností při zvažování zdrojový kód ostatními vývojáři.

Odpovězeno 24/08/2011 v 10:25
zdroj uživatelem

hlasů
27

Jeden argument jinde neuvedené preferovat Pascal případ String:

System.Stringje referenční typ, a referenční druhy jména jsou Pascal případ konvencí .

Odpovězeno 03/10/2012 v 11:52
zdroj uživatelem

hlasů
21

Obojí je rozdíl same.The je, jak jej použít. Úmluva,

s Tring je pro proměnné

S Tring je pro volání jiné metody třídy String

Jako:

string fName = "John";
string lName = "Smith";

string fullName = String.Concat(fName,lName);

if (String.IsNullOrEmpty(fName))
{
  Console.WriteLine("Enter first name");
}
Odpovězeno 07/04/2015 v 10:30
zdroj uživatelem

hlasů
18

Řetězec je alias pro System.String . Sestavují ke stejnému kódu, takže v době provádění není žádný rozdíl. To je jen jeden z aliasů v jazyce C #. Kompletní seznam alias je:

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char
Odpovězeno 22/02/2016 v 11:02
zdroj uživatelem

hlasů
16

String odkazuje na objekt řetězec, který je dodáván s různými funkcemi pro manipulaci obsažené řetězec.

string odkazuje na primitivní typ

V C # oba kompilovat na provázku, ale v jiných jazycích nemají, takže byste měli použít řetězec, pokud chcete vypořádat s objekty String a řetězec, pokud chcete vypořádat s literály.

Odpovězeno 04/10/2012 v 11:37
zdroj uživatelem

hlasů
12

V případě, že je to užitečné, aby skutečně vidět, že není žádný rozdíl mezi stringa System.String:

var method1 = typeof(MyClass).GetMethod("TestString1").GetMethodBody().GetILAsByteArray();
var method2 = typeof(MyClass).GetMethod("TestString2").GetMethodBody().GetILAsByteArray();

//...

public string TestString1()
{
    string str = "Hello World!";
    return str;
}

public string TestString2()
{
    String str = "Hello World!";
    return str;
}

Oba vyrobit přesně stejným IL bajtové pole:

[ 0, 114, 107, 0, 0, 112, 10, 6, 11, 43, 0, 7, 42 ]
Odpovězeno 01/10/2015 v 17:43
zdroj uživatelem

hlasů
9

Neexistuje prakticky žádný rozdíl

C#Řetězec klíčové slovo mapuje na .NETdruhu System.String- jedná se o alias, který udržuje konvencím pojmenování jazyka.

Odpovězeno 07/03/2014 v 14:09
zdroj uživatelem

hlasů
7

Nepotřebujete import názvů (pomocí System) používat string, protože se jedná o globální alias System.String.

Chcete-li vědět více o aliasů můžete zkontrolovat tento odkaz .

Odpovězeno 30/12/2014 v 13:43
zdroj uživatelem

hlasů
6

Chcete-li být upřímný, v praxi obvykle není rozdíl mezi System.String a řetězec .

Všechny druhy uvedené v C # jsou objekty a všechny pochází z System.Object třídě. Jeden rozdíl je, že řetězec je C # klíčová slova a String můžete použít jako název proměnné. System.String je běžný název .NET tohoto typu a řetězec je výhodný C # název. Zde je jednoduchý program, který představuje rozdíl mezi System.String a provázků.

string a = new string(new char[] { 'x', 'y', 'z' });
string b = new String(new char[] { 'x', 'y', 'z' });
String c = new string(new char[] { 'x', 'y', 'z' });
String d = new String(new char[] { 'x', 'y', 'z' });
MessageBox.Show((a.GetType() == typeof(String) && a.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((b.GetType() == typeof(String) && b.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((c.GetType() == typeof(String) && c.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((d.GetType() == typeof(String) && d.GetType() == typeof(string)).ToString()); // shows true

@JonSkeet v mém kompilátoru

public enum Foo : UInt32 { }

pracuje. Byl jsem Visual Studio 2015 společenství.

Odpovězeno 04/06/2016 v 11:20
zdroj uživatelem

hlasů
6

V rámci dokumentace MSDN , Stringtřída je popsána jako jakýkoli jiný typ dat ( například , XmlReader, StreamReader) v BCL .

A stringje dokumentován jako klíčového slova (C # reference), nebo jako každý základní C # jazyk konstruktu ( například , for, while, default).

Reference .

Odpovězeno 26/07/2014 v 16:40
zdroj uživatelem

hlasů
5

Za prvé, a to jak (string & String) nejsou stejné. Je rozdíl: String není klíčové slovo a může být použit jako identifikátor, zatímco řetězec je klíčové slovo a nemůže být použit jako identifikátor.

Snažím se vysvětlit, s různými Například: Za prvé, když jsem dal „string s;“ do Visual Studia a vznášet se nad ní získám (bez barvy):
řetězec Definice

Který říká, že řetězec je System.String, že jo? Dokumentace je https://msdn.microsoft.com/en-us/library/362314fe.aspx . Druhá věta říká, že „řetězec je alias na provázku v rozhraní .NET Framework.“.

Odpovězeno 08/02/2018 v 08:28
zdroj uživatelem

hlasů
5

Jak již bylo uvedeno, že jsou to samé a stringje jen alias String.

Za to, co stojí za to, já používám řetězce deklarovat typy - proměnné, vlastnosti vrácené hodnoty a parametry. To je v souladu s použitím jiných typů systémů - int, bool, varetc (ačkoli Int32i Booleantak také správné).

I používat Stringpři použití statické metody na třídy String, jako je String.Split()či String.IsNullOrEmpty(). Mám pocit, že to dává větší smysl, protože metody patří do skupiny, a to v souladu s tím, jak jsem se použít i jiné statické metody.

Odpovězeno 28/12/2015 v 09:03
zdroj uživatelem

hlasů
4

Není žádný rozdíl mezi těmito dvěma. Můžete použít některý z nich ve svém kódu.

System.Stringje třída (referenční typ) definována mscorlibv oboru názvů System. Jinými slovy, System.Stringje druh v CLR.

string je klíčové slovo C#

Odpovězeno 20/01/2016 v 10:53
zdroj uživatelem

hlasů
4

Pokud je mi známo, stringje jen alias System.String, a podobné další jména existují bool, object, int... jen malý rozdíl je, že můžete použít stringbez „za použití System;směrnice“, zatímco String to vyžaduje (jinak byste měli zadat System.Stringv plném znění) ,

O tom, které je nejlépe použít, myslím, že je to otázka vkusu. Osobně dávám přednost string, ale to není náboženská záležitost.

Odpovězeno 20/06/2014 v 04:55
zdroj uživatelem

hlasů
4

String: Objekt řetězec se nazývá neměnná (read-only), protože jeho hodnotu nelze změnit poté, co byl vytvořen. Způsoby, které se objevují k úpravě objekt String skutečně vrátí nový objekt řetězec, který obsahuje modifikaci. Je-li nutné upravit skutečný obsah objektu provazce

Řetězec: Typ řetězec představuje sekvenci nula nebo více znaků Unicode. Řetězec je alias na provázku v .NET Framework. stringje vnitřní C # datový typ, a je alias pro systém za předpokladu, typu „System.String“. Specifikace C # uvádí, že jako věc stylu klíčové slovo ( řetězec ) je upřednostňována před plným jménem typu systém (System.String, nebo String). I když řetězec je referenčním typem, provozovatelé zabývající se rovností (== a! =) Jsou definovány pro porovnání hodnot objektů typu string, ne referencí. To dělá vyšetření na řetězec rovnosti více intuitivní. Například:

Rozdíl mezi řetězce a řetězec:

  • stringSe obvykle používá pro deklaraci, když Stringse používá pro přístup k statické metody řetězce
  • Můžete použít 'string'to prohlásit pole, vlastnosti, atd, které používají předdefinovaný typ 'string', neboť C # specifikace mi říká, že to je dobrý styl.
  • Můžete použít 'String'pouze systémové definované metody, jako je například String.Compare atd Jsou původně definovány na ‚System.String‘, nikoli ‚řetězec‘. 'string'je jen alias v tomto případě.
  • Můžete také použít 'String'nebo ‚System.Int32‘ při komunikaci s jiným systémem, zejména pokud jsou CLR-kompatibilní. tedy - mohu-li získat data z jinde, bych deserializovat ji do System.Int32 spíše než ‚int‘, pokud je uveden původ z povahy věci něco jiného než C # systému.
Odpovězeno 20/05/2014 v 15:34
zdroj uživatelem

hlasů
3

String je sekvenční kolekce znaků , který se používá k reprezentaci textu.

Objekt Řetězec je sekvenční kolekce objektů System.Char , které představují řetězec; objekt System.Char odpovídá kódu jednotky UTF-16.

Hodnota objektu String je obsah sekvenční kolekce objektů System.Char, a tato hodnota je neměnná (to znamená, že je jen pro čtení).

Pro více informací o neměnnosti řetězcích naleznete neměnnost a sekci StringBuilder třídy v MSDN.

Maximální velikost objektu String do paměti je 2 GB, nebo asi 1 miliarda znaky.

Poznámka: Odpověď je získávána z MSDN části nápovědy. Můžete vidět celý obsah zde ve třídě msdn String témat podle § Poznámky

Odpovězeno 10/11/2017 v 11:34
zdroj uživatelem

hlasů
3

Řetězec se rovná System.String
v VS2015, pokud si to napsat

System.String str;

Než kompilátor ukáže potenciální opravu ji optimalizovat a po použití tohoto fixe to bude vypadat takto

string str;
Odpovězeno 25/03/2017 v 05:04
zdroj uživatelem

hlasů
2

@JaredPar (developer na C # kompilátor a plodný SO uživatele!) Napsal velký příspěvek na blogu na toto téma. Myslím, že to stojí za sdílení zde. Je to pěkný pohled na naše téma.

stringvs. Stringnení debata styl

[...]

Klíčové slovo stringmá konkrétní význam v jazyce C #. Jedná se o typ System.String, který existuje v sestavě jádra runtime. Běhové intrinsictly chápe tento typ a poskytuje možnosti vývojáři očekávají pro řetězce v .NET. Jeho přítomnost je tak důležité, aby C #, že pokud neexistuje, že typ kompilátor vystoupí před pokusem o ještě analyzovat řádek kódu. Z tohoto důvodu stringmá přesný a jednoznačný význam v C # kódu.

Identifikátor Stringmá však žádný konkrétní význam v jazyce C #. Slouží jako identifikátor, který prochází všemi pravidly název vyhledávací například Widget, Studentatd ... Mohlo by se váží na provázku, nebo by to mohlo vázat na typu v jiné sestavě zcela zrušit, jejíž účel může být zcela odlišná od string. Horší by to mohlo být definováno takovým způsobem, že kód, jako je String s = "hello"; pokračoval sestavit.

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;
}

Skutečný význam Stringbude vždy záviset na rozlišení názvů. To znamená, že to záleží na všech zdrojových souborů v projektu a všech typů definovaných ve všech zmíněných sestav. Stručně řečeno to vyžaduje docela dost kontextu vědět, co to znamená.

Je pravda, že v drtivé většině případů Stringa stringbudou vázat ke stejnému druhu. Ale za použití Stringstále znamená, že vývojáři jsou opouští svůj program do výkladu v místech, kde existuje pouze jedna správná odpověď. Když Stringse váží na špatný typ může nechat vývojářům ladění celé hodiny, podání chyby v kompilátoru týmu a obecně ztrácet čas, který mohl být uložen pomocí string.

Dalším způsobem, jak vizualizovat rozdíl je s tímto vzorkem:

string s1 = 42; // Errors 100% of the time  String s2 = 42; // Might
error, might not, depends on the code

Mnozí budou tvrdit, že i když toto je informace technicky správné používání Stringje ještě v pořádku, protože to je mimořádně vzácný, že kodex základna by definovat typ tohoto jména. Nebo že když Stringje definován, že je to známka špatného kódu.

[...]

Uvidíte, že Stringje definována pro celou řadu zcela platných účely: reflexními pomocníků, serializace knihoven, lexers, protokoly, atd ... Pro některé z těchto knihoven Stringvs. stringmá skutečné důsledky v závislosti na tom, kde se používá kód.

Takže pamatujte, když vidíte Stringvs stringdebaty se jedná o sémantiku, nikoli styl. Výběrem řetězec dává ostrý smysl vašeho kódu. Vybírání Stringnení špatné, ale je to nechat otevřené překvapení v budoucnu dveře.

Poznámka: I kopírovat / vložit většinu blogu pro archivní důvodu. I ignorovat některé části, takže doporučuji přeskočit a přečíst příspěvek na blogu , pokud je to možné.

Odpovězeno 11/04/2019 v 08:39
zdroj uživatelem

hlasů
2

Je běžnou praxí deklarovat proměnnou pomocí C # klíčová slova. Ve skutečnosti, každý C # typu má ekvivalent v .NET. Jako další příklad, krátká a int v C # mapě na Int16 a Int32 v .NET. Takže technicky není žádný rozdíl mezi řetězce a řetězec, ale v jazyce C #, string je alias pro třídu String v rámci .NET.

Odpovězeno 01/12/2018 v 17:44
zdroj uživatelem

hlasů
2

Je tam jeden praktický rozdíl mezi stringa String.

nameof(String); // compiles
nameof(string); // doesn't compile

Je to proto, že stringje klíčové slovo (alias v tomto případě), zatímco Stringje typ.

Totéž platí i pro ostatní aliasy stejně.

| Alias     | Type             |
|-----------|------------------|
|  bool     |  System.Boolean  |
|  byte     |  System.Byte     |
|  sbyte    |  System.SByte    |
|  char     |  System.Char     |
|  decimal  |  System.Decimal  |
|  double   |  System.Double   |
|  float    |  System.Single   |
|  int      |  System.Int32    |
|  uint     |  System.UInt32   |
|  long     |  System.Int64    |
|  ulong    |  System.UInt64   |
|  object   |  System.Object   |
|  short    |  System.Int16    |
|  ushort   |  System.UInt16   |
|  string   |  System.String   |
Odpovězeno 18/01/2018 v 13:40
zdroj uživatelem

hlasů
2

V jazyce C #, string je alias pro třídu String v rámci .NET. Ve skutečnosti, každý C # typu má ekvivalent v .NET. Jako další příklad, krátká a int v C # mapě na Int16 a Int32 v .NET.

Takže technicky není žádný rozdíl mezi řetězce a řetězec, ale je běžnou praxí deklarovat proměnnou pomocí C # klíčová slova. Já jsem skoro neviděl nikoho, ve kterém prohlásí celé číslo s Int32!

Jediný drobný rozdíl je, že pokud budete používat třídu String, je nutné importovat oboru názvů System na začátek souboru, vzhledem k tomu, že nemáte k tomu při použití klíčové slovo řetězce.

Mnoho vývojářů raději deklarovat proměnnou řetězce s řetězcem, ale používat třídu String při přístupu jednu ze svých statické členy:

1

String.Format()
Odpovězeno 16/11/2017 v 12:06
zdroj uživatelem

hlasů
2

Raději používat string, protože tento typ se používá tak, že nechci do syntaxe zvýrazňovač mísení se všemi ostatními třídami. Přestože se jedná o třídu se používá spíše jako primitivní a proto si myslím, že jiný zvýraznění barev je vhodné.

Pokud kliknete pravým tlačítkem na stringklíčové slovo a vyberte Go to definitionz kontextového menu vám to bude trvat na Stringtřídě - je to jen syntaktický cukr, ale zlepšuje čitelnost imo.

Odpovězeno 18/10/2017 v 15:11
zdroj uživatelem

hlasů
2

String : představují třídu

Řetězec : Represent alias

Je to jen kódovací konvence od společnosti Microsoft.

Odpovězeno 11/12/2016 v 00:38
zdroj uživatelem

hlasů
2

Řetězec je alias pro řetězec v rozhraní .NET Framework.

Kde „String“, je ve skutečnosti System.String.

Řekl bych, že jsou zaměnitelné a není tam žádný rozdíl, kdy a kde byste měli používat jedno nebo druhé.

Bylo by lepší, aby byly v souladu s nimiž jednou jste použít ačkoli.

Za to, co stojí za to, já používám stringdeklarovat typy - proměnné, vlastnosti vrácené hodnoty a parametry. To je v souladu s použitím jiných typů systémů - int, bool, varetc (ačkoli Int32i Booleantak také správné).

Já používám řetězce při použití statické metody na třídy String, jako je String.Split()či String.IsNullOrEmpty(). Mám pocit, že to dává větší smysl, protože metody patří do skupiny, a to v souladu s tím, jak jsem se použít i jiné statické metody.

Odpovězeno 11/06/2014 v 12:15
zdroj uživatelem

hlasů
1

Všechny výše uvedené je v podstatě správný. Jeden může zkontrolovat. Stačí napsat krátký metodu

public static void Main()
{
    var s = "a string";
}

zkompilovat a otevře .exese ildasmvidět

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       8 (0x8)
  .maxstack  1
  .locals init ([0] string s)
  IL_0000:  nop
  IL_0001:  ldstr      "a string"
  IL_0006:  stloc.0
  IL_0007:  ret
} // end of method Program::Main

pak se změní varna stringa Stringkompilace, otevřené ildasma vidět ILnemění. To také ukazuje, tvůrci jazyka dává přednost právě stringkdyž difining proměnných (spoiler: Při volání členy dávají přednost String).

Odpovězeno 25/06/2019 v 15:06
zdroj uživatelem

hlasů
1

deklarovat proměnné řetězce s řetězci, ale používat třídu String při přístupu jednu ze svých statické členy:

String.Format()

proměnlivý

string name = "";
Odpovězeno 14/05/2019 v 18:15
zdroj uživatelem

hlasů
1

Stringje třída string. Máte-li odstranit Systemnázvů používat prohlášení, můžete vidět, že Stringje pryč, ale stringje stále tady. stringje klíčové slovo pro řetězec. Stejně jako Takže klíčová slova jsou jen některá slova, která používá třídu. Tato klíčová slova jsou určeny C # (takže Microsoft, protože C # je Microsoft). Stručně řečeno, není žádný rozdíl. Použitím . To nevadí. Jsou to stejné.
int and Int32
short and Int16
long and Int64

string or String

Odpovězeno 16/10/2018 v 17:32
zdroj uživatelem

hlasů
1

Řetězec je zkratka pro System.String. Jediným rozdílem je, že nepotřebujete odkazovat na System.Stringjmenném prostoru. Takže by bylo lepší používat řetězec než String.

Odpovězeno 22/07/2018 v 16:30
zdroj uživatelem

hlasů
1

Jak již víte, stringje jen alias System.String. Ale co bych měl použít? to prostě osobní preference.

V mém případě, mám rád používat stringnamísto použití System.String, protože Stringvyžaduje názvů using System;nebo úplný název System.String.

Takže se domnívám, že alias stringbyl vytvořen pro zjednodušení a líbí se mi to!

Odpovězeno 12/07/2018 v 01:35
zdroj uživatelem

hlasů
1

Jeffrey Richter napsal:

Další způsob, jak myslet na to, že C # kompilátor automaticky předpokládá, že máte tyto usingsměrnice ve všech svých souborů se zdrojovým kódem:

using int = System.Int32;
using uint = System.UInt32;
using string = System.String;
...

Viděl jsem řadu vývojářů zmatené a neví, zda se má použít řetězec nebo řetězec ve svém kódu. Vzhledem k tomu, v C # string (klíčové slovo) mapuje přesně System.String (typ FCL), není žádný rozdíl a lze použít obě možnosti.

Odpovězeno 01/02/2018 v 13:13
zdroj uživatelem

hlasů
1

stringje krátký název System.String. Stringnebo System.Stringje název řetězce v CTS(Common Type System).

Odpovězeno 12/01/2018 v 09:19
zdroj uživatelem

hlasů
1

string(Malé) je alias pro System.String. Znamenají totéž v C #.

Alias ​​se používají, aby se zabránilo používání celý název funkce, včetně názvů a tříd.

Lidé často argumentují, zda se má použít Systémové typy nebo C # aliasy. Já používám C # aliasy většinu času, ale můžete skutečně používat kdokoliv.

Jako někdo zmínil, je to jen jako bool a Boolean, není velký rozdíl ..

Odpovězeno 05/01/2018 v 19:52
zdroj uživatelem

hlasů
1

V jazyce C #, string je alias pro třídu String v rámci .NET. Ve skutečnosti, každý C # typu má ekvivalent v .NET. Jako další příklad, krátká a int v C # mapě na Int16 a Int32 v .NET.

Takže technicky není žádný rozdíl mezi řetězce a řetězec, ale je běžnou praxí deklarovat proměnnou pomocí C # klíčová slova. Já jsem skoro neviděl nikoho, ve kterém prohlásí celé číslo s Int32!

Jediný drobný rozdíl je, že pokud budete používat třídu String, je nutné importovat oboru názvů System na začátek souboru, vzhledem k tomu, že nemáte k tomu při použití klíčové slovo řetězce.

Mnoho vývojářů raději deklarovat proměnnou řetězce s řetězcem, ale používat třídu String při přístupu jednu ze svých statické členy:

String.Format()
Odpovězeno 10/05/2016 v 23:53
zdroj uživatelem

hlasů
0

Dobře technicky oba z nich jsou stejné, ale s nepatrným rozdílem. Zatímco „string“ je datový typ, zatímco „String“ reprezentuje třídu. „String“ je alias pro System.String. V době provádění jsou oba sestaven tak, aby se stejným kódem. Ještě jeden rozdíl je syntax zvýrazňovač.

Podívejme se nyní zjistit fragmentu kódu pochopit, jak z nich.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Threading.Tasks;  
    namespace ConsoleApplication2  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                string FirstName = ".Net";  
                String Lastname = "Snippets";  
                Console.WriteLine(FirstName + " " + Lastname);  
                Console.ReadLine();  
            }  
        }  
    }  
Odpovězeno 23/09/2019 v 12:22
zdroj uživatelem

hlasů
0

Jednou z otázek, že mnoho nováček C # programátory položit, zní: „Jaký je rozdíl mezi řetězce a řetězec“ V jazyce C #, string je alias pro třídu String v rámci .NET. Ve skutečnosti, každý C # typu má ekvivalent v .NET. Jako další příklad, krátká a int v C # mapě na Int16 a Int32 v .NET.

Takže technicky není žádný rozdíl mezi řetězce a řetězec, ale je běžnou praxí deklarovat proměnnou pomocí C # klíčová slova. Já jsem skoro neviděl nikoho, ve kterém prohlásí celé číslo s Int32! Jediný drobný rozdíl je, že pokud budete používat třídu String, je nutné importovat oboru názvů System na začátek souboru, vzhledem k tomu, že nemáte k tomu při použití klíčové slovo řetězce. Mnoho vývojářů raději deklarovat proměnnou řetězce s řetězcem, ale používat třídu String při přístupu jednu ze svých statické členy:

String.Format()
Odpovězeno 21/09/2019 v 18:18
zdroj uživatelem

hlasů
0

Existuje mnoho (např Jeffrey Richter ve své knize CLR Via C # ), kteří říkají, že není žádný rozdíl mezi System.Stringa stringa i System.Int32a int, ale musíme rozlišovat trochu hlouběji, aby skutečně vymačkat šťávu z této otázce, abychom mohli získat všechny nutriční hodnoty z ní (psát lepší kód).

A. Jsou Same ...

  1. kompilátoru.
  2. pro vývojáře.

Víme, že # 1 a nakonec dosáhnout autopilota.

B. Liší se v Famework a Non-C # souvislostech. Odlišný...

  1. do jiných jazyků, které jsou NOT C #
  2. v optimalizovaném CIL (bylo MSIL) kontext (.NET VM sestavení jazyk)
  3. V souvislosti s plošinou cílené - .NET Framework nebo Mono nebo jakékoliv CIL typu oblasti
  4. v knize cílení na několik .NET jazyky (například VB.NET, F #, atd)

Takže je pravda, odpověď je, že je to jen proto, že C # má ve spoluvlastnictví .NET prostor s jinými jazyky, které ještě existuje na tuto otázku.

C. Abychom to shrnuli ...

Používáte stringa inti ostatní typy C # v jazyce C # -jen cílené publikum (položit otázku, kdo bude číst tento kód, nebo použít tuto knihovnu). Pro interní společnosti, pokud budete používat pouze C #, pak držet typy C #.

... a můžete použít System.Stringi System.Int32ve vícejazyčném nebo rámcové cílovému publiku (když C # není jediným publikum). Pro své interní organizaci, pokud jste také použít VB.NET či F # nebo jakýkoli jiný NET jazyk, nebo rozvíjet knihovny určené ke spotřebě zákazníků, kteří mohou, pak byste měli používat typy „Frameworky“ v těchto souvislostech, takže každý může pochopit váš interface , bez ohledu na to, co vesmír oni jsou od. (Co je Klingon pro System.Stringvlastně je?)

HTH.

Odpovězeno 16/08/2019 v 17:11
zdroj uživatelem

hlasů
0

Rozdíl mezi řetězce a řetězec v jazyce C #

Jednou z otázek, že mnoho nováček C # programátory položit, zní: „Jaký je rozdíl mezi řetězce a řetězec?“

V jazyce C #, string je alias pro třídu String v rámci .NET. Ve skutečnosti, každý C # typu má ekvivalent v .NET. Jako další příklad, krátká a int v C # mapě na Int16 a Int32 v .NET.

Takže technicky není žádný rozdíl mezi řetězce a řetězec, ale je běžnou praxí deklarovat proměnnou pomocí C # klíčová slova. Já jsem skoro neviděl nikoho, ve kterém prohlásí celé číslo s Int32!

Jediný drobný rozdíl je, že pokud budete používat třídu String, je nutné importovat oboru názvů System na začátek souboru, vzhledem k tomu, že nemáte k tomu při použití klíčové slovo řetězce.

Mnoho vývojářů raději deklarovat proměnnou řetězce s řetězcem, ale používat třídu String při přístupu jednu ze svých statické členy: String.Format ()

Vytváření textu aliasů v jazyce C #: link

Odpovězeno 09/05/2019 v 11:17
zdroj uživatelem

hlasů
0

To kompiluje:

public class MyClass<String>
{
}

To však není:

public class MyClass<string>
{
}
Odpovězeno 17/04/2019 v 19:16
zdroj uživatelem

hlasů
-1

Výsledkem obraz pro řetězec vs Stringwww.javatpoint.com v jazyce C #, string je alias pro třídu String v rámci .NET. Ve skutečnosti, každý C # typu má ekvivalent v .NET. ... Jediný nepatrný rozdíl je, že pokud budete používat třídu String, je nutné importovat oboru názvů System na začátek souboru, vzhledem k tomu, že nemáte k tomu při použití klíčové slovo řetězce

Odpovězeno 02/07/2019 v 08:44
zdroj uživatelem

hlasů
-7

Řetězec je tříd .NET Framework, kde jako řetězec je ac # třídou.

Odpovězeno 01/10/2017 v 14:11
zdroj uživatelem

hlasů
-7

Řetězec není nic jiného alias pro třídu String. Chcete-li používat funkce třídy string, pak byste měli použít řetězec, co byste měli držet řetězec. Například pokud chcete formátovat řetězec, pak byste měli používat třídu String použít String.Format(), ale pokud jste jednoduchý chcete definovat řetězec, pak byste měli použít string test=""; Upozorňujeme, že oba jsou reference typu.

Odpovězeno 06/04/2016 v 17:24
zdroj uživatelem

hlasů
-11

Jednoduchý způsob: řetězec je typ dat String je třída.

Odpovězeno 17/04/2017 v 07:53
zdroj uživatelem

hlasů
-26

Fakta o řetězec :

  1. Řetězec je třída System.String
  2. Řetězec je referenční typ (třída)
  3. Řetězec je název alias String class, který je vytvořen pomocí Microsoft
  4. Řetězec je typ hodnoty (typ dat) řetězec je C#klíčové slovo

  5. Řetězec je kompilátor zkratka pro System.Stringtřídu

Odpovězeno 07/02/2014 v 07:33
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more