2011-09-01 44 views
1

我創建使用C#中使用字符串格式讀取一個字符串轉換成一個對象

String.Format(IPAddressRangeFormat, StartIP, EndIP); 

現在我需要讀取的字符串回StartIP和EndIP對象的字符串。

在c#中最簡單的方法是什麼?

THanks, Li。

+0

能否請您包括更多的代碼。有更多的上下文可以幫助人們理解你的問題。 –

+0

你能否發佈你的變量的內容 – Gambrinus

+1

'IPAddressRangeFormat'的值是什麼?這個問題沒有通用的解決方案。 – Blorgbeard

回答

4

有沒有簡單的方法來做到這一點,因爲String.Format的反向不是確定性的。

兩個:

String.Format("{0}{1}", "123", "456") 
String.Format("{0}{1}", "12", "3456") 

給你123456。該機器不會只是猜測你想要哪一個。

然而,有一個更棘手的方法來做到這一點,你有正則表達式。

如果您有:

String.Format ("{0}-{1}", StartIP, EndIP); 

你可以使用一個表達式:

var matches = Regex.Match (String.Format ("{0}-{1}", "127.0.0.1", "192.168.0.1"), "(?<startIP>.*)-(?<endIP>.*)"); 
Console.WriteLine (matches.Groups["startIP"].Value); // 127.0.0.1 
Console.WriteLine (matches.Groups["endIP"].Value); // 192.168.0.1 
+0

在這種情況下使用正則表達式有點過分複雜。爲什麼不'String.Split(' - ')'? – IAbstract

+0

你可以爲我給出的例子。但是,這隻適用於一些有限的情況。對於反轉格式字符串的一般情況,這正是正則表達式匹配的目的。不知道OP的具體情況,這是處理所有可能性的唯一方法。 –

+0

另外,一旦你克服了對正則表達式的恐懼,它們並不那麼複雜。或者說,你可以有簡單的正則表達式,你可以有複雜的 - 取決於你想要做什麼。恕我直言'(?。*) - (?。*)'不是一個複雜的正則表達式,不應該花費任何努力去讓一個有能力的編碼者理解。 –

0

你想要做的事情叫做解析,它不能由String.Format方法執行。

2

可能是最好的方式有像IPRange這樣的單獨類型,在這裏你將有兩個IP在構造函數中並且被覆蓋ToString()。釷解析你可能需要實現自定義邏輯,讓我們說靜態Parse(string)成員。

+0

無論如何,你將需要手動解析字符串 – Samich

0

根據您的IPAddressRangeFormat的格式,使用ToString()...然後string.Split(':') ...用正在使用的任何char替換':'。

我真的需要看到你的格式爲IPAddressRangeFormat以提供更好的答案。

相關問題