2014-02-26 66 views
7

是否可以定義默認數字格式,該格式在我將integer(或double等)轉換爲String而未指定格式字符串時使用?ToString的默認數字格式

C#示例:

int i = 123456; 

string s = "Hello " + i; 
// or alternatively with string.Format without format definition 
string s = string.Format("Hello {0}", i); 

ASP.NET剃刀例如:

<div> 
    Hello @i 
</div> 

我認爲所有這些代碼行隱含使用默認ToString()方法Int32。並不奇怪,所有這些代碼行都會導致"Hello 123456",但我想要"Hello 123,456"

因此,我可以指定"N0"應該默認使用(至少對於integer)?

我已經找到Set Default DateTime Format c#這個問題 - 它看起來不錯,但它對數字沒有幫助。


編輯:我知道,我可以寫,我可以在我的應用程序中使用的擴展方法,但是這不是我要找的。我想找到一個屬性(可能隱藏在CultureInfoNumberFormatInfo中),它目前設置爲"G",默認使用Int32.ToString()實現。

+0

你可以做一些cultureInfo.NumberFormat,在路上你的例子使用的網址DateTimeFormat? –

+1

這可能有點過於寬泛。根據具體情況,可以這樣做。對於MVC,你可以創建一個DisplayTemplate並使用'@ Html.DisplayFor'。對於某些WinForms控件,您可以在類屬性上指定一個屬性。 – Stijn

+0

@TomBrown不,這就是我發佈我的問題的原因。 :-) – fero

回答

0

您可以覆蓋系統toString()方法到類爲下:

public override string ToString() 
    { 
    int i = 123456; 
     string s = "Hello " + i; 
     return string.Format("Hello {0}", i); 
    } 
+1

我沒有課。我想爲每個「整數」指定默認格式。 – fero

+2

除了@ fero的評論之外,即使他想要,他也不能繼承「int」。 –

0

你可以使用擴展方法

public static class MyExtensions 
{ 
    public static string ToDefaultFormatString(this int i) 
    { 
     //Staf 
    } 
} 

和你的代碼看起來像

int i = 123456; 

string s = "Hello " + i.ToDefaultFormatString(); 
+0

但這並不是他想要實現的 - 他很清楚他正試圖控制int上的ToString()的結果。 –

+0

再次審查問題後,你是對的 –

0

當你試圖修改功能的基本類型,它沒有類,你不能覆蓋ToString()方法。

然而,您可以創建一個擴展方法。

namespace System 
{ 

    public class IntExt 
    { 
     public string ToStringN0(this int i) 
     { 
      return i.ToString("N0"); 
     } 
    } 

} 

然後

int i = 5000; 
Console.WriteLine(i.ToStringN0()); 

的例子使用使該類將在System命名空間,因此將可以通過該應用程序。

0

如果你創建自己的CultureInfo,你可以改變它,然後它在這個答案分配給CultureInfo.CurrentCulture,如:

https://stackoverflow.com/a/24785761/166921

+0

好主意,但不幸的是,這並沒有幫助我,因爲'CultureInfo'不是這裏的問題。使用正確的文化,但默認的'ToString'實現使用'G'格式而不是我想要的('N0')。 – fero

+0

@fero恐怕這是不可定製的。它總是'G'。 'CultureInfo'對'G'格式沒有多大影響(您可以更改分隔符但不能更改小數位數)。 –