文字列をSystem.Guid
に変換する2つの方法の違いは何ですか?どちらかを選ぶ理由はありますか?Guid.Parse()またはnew Guid() - 違いは何ですか?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
または
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
文字列をSystem.Guid
に変換する2つの方法の違いは何ですか?どちらかを選ぶ理由はありますか?Guid.Parse()またはnew Guid() - 違いは何ですか?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
または
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
Reflectorをすばやく見れば、どちらもかなり同等であることがわかります。
public Guid(string g)
{
if (g == null)
{
throw new ArgumentNullException("g");
}
this = Empty;
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.All);
if (!TryParseGuid(g, GuidStyles.Any, ref result))
{
throw result.GetGuidParseException();
}
this = result.parsedGuid;
}
public static Guid Parse(string input)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.AllButOverflow);
if (!TryParseGuid(input, GuidStyles.Any, ref result))
{
throw result.GetGuidParseException();
}
return result.parsedGuid;
}
お返事ありがとうございます。私は本当に「彼らの仕事の仕方に違いがあるか」を探していました。 – brennazoon
使用されたGuidParseThrowStyleには明確な違いがあるように見えます。 – Triynko
@Triynko:コードを見ると、両方とも同じ理由で投げられることがわかります。唯一の違いは、 'OverflowException'がスローされた場合、' Guid.Parse'の場合に 'FormatException'にカプセル化されることです。 –
私はTryParse
となるだろう。例外をスローしません。
私はそれを理由として考えません。あなたが例外とシナリオを必要としないシナリオがあります。シナリオに応じて適切な方法を選択することがより重要になります。 –
空の文字列を持つ可能性のあるdbを+1すると、guidを解析し、文字列が空の場合はGuid.Emptyを取得する簡単な方法です。 – ashes999
最も読みやすいバージョンを使用してください。 2つはほぼ同じように実装されています。
唯一の違いは、構文解析を試みる前にコンストラクタがGuid.Empty
に初期化されていることです。ただし、有効なコードは同一です。
つまり、Guid
がユーザー入力から来ている場合は、Guid.TryParse
がどちらのオプションよりも優れています。このGuid
がハードコードされており、常に有効な場合、上記のいずれかが完全に合理的なオプションです。
私は1 milion guidsとGuid.Parseでパフォーマンスを試したが、それほど高速ではないようだ。それは私のPC上で合計の800ミリ秒の10-20ミリ秒の違いを作りました。
public class Program
{
public static void Main()
{
const int iterations = 1000 * 1000;
const string input = "63559BC0-1FEF-4158-968E-AE4B94974F8E";
var sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
new Guid(input);
}
sw.Stop();
Console.WriteLine("new Guid(): {0} ms", sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
Guid.Parse(input);
}
sw.Stop();
Console.WriteLine("Guid.Parse(): {0} ms", sw.ElapsedMilliseconds);
}
}
そして出力:
新しいGUID():804ミリ
Guid.Parse():791ミリ秒かの点で、
? – raym0nd
また、以下を使用することもできます:Guid.TryParse() –