2017-05-31 89 views
-1

我正在閱讀有關BigInteger s(C#中的數值類型,「放大」。例如,在做一個斐波納契數列很快就會變得太大而無法使用long)。BigInteger是CTS支持的類型(.NET)嗎?

現在,我想知道CTS是否支持BigInteger。例如,我可以使用BigInteger類型中的全部是 .NET語言嗎?

+0

此文檔頁面顯示C#,C++,F#和VB:https://msdn.microsoft。 com/en-us/library/system.numerics.biginteger(v = vs.110).aspx - 因爲它是一個框架功能而不是特定於語言的關鍵字(例如),它應該可用於所有可以使用該版本的框架。 – ps2goat

+2

我不明白爲什麼不能,因爲它只是'System.Numerics'中定義的一個結構。它在幕後使用了一個'uint []'數組。 –

+0

你能否澄清一下「CTS」對你來說意味着什麼(也許是「[Common Type System]」(https://msdn.microsoft.com/en-us/library/zcx1eb1e(v = vs.110).aspx) - 但問題聽起來很奇怪,而不是像BigInteger類型在.Net中定義的那樣) –

回答

6

爲什麼不進行實驗看?

uisng System.Linq; 
    using System.Numerics; 
    uisng System.Reflection; 
    ... 

    var result = typeof(BigInteger) 
    .Assembly 
    .GetCustomAttributes() 
    .Select(attr => attr.GetType().Name) 
    .ToArray(); 

    Console.Write(string.Join(Environment.NewLine, result)); 

結果:

AssemblySignatureKeyAttribute 
DebuggableAttribute 
ComVisibleAttribute 
CLSCompliantAttribute     <--------------- that is! 
AllowPartiallyTrustedCallersAttribute 
SecurityRulesAttribute 
AssemblyTitleAttribute 
AssemblyDescriptionAttribute 
AssemblyDefaultAliasAttribute 
AssemblyCompanyAttribute 
AssemblyProductAttribute 
AssemblyCopyrightAttribute 
AssemblyFileVersionAttribute 
AssemblyInformationalVersionAttribute 
SatelliteContractVersionAttribute 
NeutralResourcesLanguageAttribute 
AssemblyDelaySignAttribute 
AssemblyKeyFileAttribute 
CompilationRelaxationsAttribute 
RuntimeCompatibilityAttribute 
SecurityPermissionAttribute 

正如你所看到的,BigInteger結構是其中顯式聲明CLSCompliantAttribute組裝來實現。這是wahy的答案是「是的,BigInteger符合CLS,可用於任何.Net語言」。

https://msdn.microsoft.com/en-us/library/system.clscompliantattribute(v=vs.110).aspx

的細節

編輯:一些BigInteger成員,然而, CLSCompliant(見添Schmelter的評論):

var result = typeof(BigInteger) 
    .GetMembers(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public) 
    .Where(member => member 
     .GetCustomAttributes(typeof(CLSCompliantAttribute)) 
     .OfType<CLSCompliantAttribute>() 
     .Any(attr => !attr.IsCompliant)) 
    .Select(member => $"{member.Name}") 
    .ToArray(); 

成果:

Equals      Equals(UInt64 other)  
CompareTo     CompareTo(UInt64 other) 
op_Implicit    operator 
op_Implicit    -/- 
op_Implicit    -/- 
op_Implicit    -/- 
op_Explicit    -/- 
op_Explicit    -/- 
op_Explicit    -/- 
op_Explicit    -/- 
op_LessThan    -/- 
op_LessThanOrEqual   -/- 
op_GreaterThan    -/- 
op_GreaterThanOrEqual  -/- 
op_Equality    -/- 
op_Inequality    -/- 
op_LessThan    -/- 
op_LessThanOrEqual   -/- 
op_GreaterThan    -/- 
op_GreaterThanOrEqual  -/- 
op_Equality    -/- 
op_Inequality    -/- 
.ctor     BigInteger(uint value) 
.ctor     BigInteger(UInt64 value) 
.ctor     BigInteger(Byte[] value) 
+0

我看到,與cls兼容的所有成員都被標記爲像[[Equals]]一樣的[[CLSCompliant(false)]](http:// referencesource.microsoft.com/#System.Numerics/System/Numerics/BigInteger.cs,c3973fd56a49c827,references)(因爲'uint'參數)。這使得它每個[定義]都符合cls(https://msdn.microsoft –

+0

請注意,問題沒有詢問CSL是否符合我所能看到的內容...所以雖然正確,但我不確定這是否真的可以解答問題。 –

1

看着MSDN文檔BigInteger,你有C#C++VB.NETF#(所有支持CLI語言)實例。

只提供給 C#

類型Microsoft.CSharp命名空間下的通常定義:

Microsoft.CSharp命名空間包含支持編譯和代碼生成的寫在C#語言源代碼的類型和類型,支持互操作愨的動態語言運行時(DLR)和C#

0

的MSDN頁面狀態

通用Windows平臺
可用自8
.NET框架
可用自4.0
便攜式類庫
在支持:可移植的.NET平臺
Silverlight
自4起可用。0
的Windows Phone
可用自8.1

所以答案是