我正在閱讀有關BigInteger
s(C#中的數值類型,「放大」。例如,在做一個斐波納契數列很快就會變得太大而無法使用long
)。BigInteger是CTS支持的類型(.NET)嗎?
現在,我想知道CTS
是否支持BigInteger
。例如,我可以使用BigInteger
類型中的全部是 .NET語言嗎?
我正在閱讀有關BigInteger
s(C#中的數值類型,「放大」。例如,在做一個斐波納契數列很快就會變得太大而無法使用long
)。BigInteger是CTS支持的類型(.NET)嗎?
現在,我想知道CTS
是否支持BigInteger
。例如,我可以使用BigInteger
類型中的全部是 .NET語言嗎?
爲什麼不進行實驗看?
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)
我看到,與cls兼容的所有成員都被標記爲像[[Equals]]一樣的[[CLSCompliant(false)]](http:// referencesource.microsoft.com/#System.Numerics/System/Numerics/BigInteger.cs,c3973fd56a49c827,references)(因爲'uint'參數)。這使得它每個[定義]都符合cls(https://msdn.microsoft –
請注意,問題沒有詢問CSL是否符合我所能看到的內容...所以雖然正確,但我不確定這是否真的可以解答問題。 –
看着MSDN文檔BigInteger,你有C#
,C++
,VB.NET
和F#
(所有支持CLI語言)實例。
C#
類型Microsoft.CSharp
命名空間下的通常定義:
的
Microsoft.CSharp
命名空間包含支持編譯和代碼生成的寫在C#
語言源代碼的類型和類型,支持互操作愨的動態語言運行時(DLR)和C#
。
的MSDN頁面狀態
通用Windows平臺
可用自8
.NET框架
可用自4.0
便攜式類庫
在支持:可移植的.NET平臺
Silverlight
自4起可用。0
的Windows Phone
可用自8.1
所以答案是是
此文檔頁面顯示C#,C++,F#和VB:https://msdn.microsoft。 com/en-us/library/system.numerics.biginteger(v = vs.110).aspx - 因爲它是一個框架功能而不是特定於語言的關鍵字(例如),它應該可用於所有可以使用該版本的框架。 – ps2goat
我不明白爲什麼不能,因爲它只是'System.Numerics'中定義的一個結構。它在幕後使用了一個'uint []'數組。 –
你能否澄清一下「CTS」對你來說意味着什麼(也許是「[Common Type System]」(https://msdn.microsoft.com/en-us/library/zcx1eb1e(v = vs.110).aspx) - 但問題聽起來很奇怪,而不是像BigInteger類型在.Net中定義的那樣) –