[char]
データ型を使用する場合、値は1文字である必要があります。例:
[char]"a"
a
複数の文字で使用するとエラーが発生するため、次のようになります。
[char]"ab"
Cannot convert value "ab" to type "System.Char". Error: "String must be exactly one
character long."
At line:1 char:1
+ [char]"ab"
+ ~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastParseTargetInvocation
しかし、私が使用する場合
[char[]]"ab"
出力を取得します
a
b
Get-Member
両方を比較すると、結果は得られません。
PS C:\Users\nijoh> Compare-Object -ReferenceObject $([char] | gm) -DifferenceObject $([char[]] | gm) -PassThru
PS C:\Users\nijoh>
しかし、表示が異なるため、2つの異なるタイプであることがわかります。
PS C:\Users\nijoh> ([char[]]"a").GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Char[] System.Array
PS C:\Users\nijoh> ([char]"a").GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Char System.ValueType
だから、何の違いである[char]
と[char[]]
PowerShellのデータ型は?
PowerShellでは、で囲まれ[...]
た型名は型リテラル、つまり、という名前の.NET型を表すオブジェクトです。
それとは別に 、内部[...]
で[]
は、型名の直後はその型の要素を含む配列を表します。内部[...]
で使用されている表記法の概要については、この回答を参照してください。
したがって:
[char]
型を参照しますSystem.Char
(System.
接頭辞はPowerShellでは通常オプションです。さらに、ここにあるように、PowerShellには、任意の名前空間にある型に単純な名前を使用できるようにする型アクセラレータの固定セットがあります。この回答を参照してください)。
[...].FullName
、;を使用します。例:[char].FullName
収量System.Char
[char[]]
要素がタイプchar
(System.Char
)である配列タイプを参照します。[char[]].FullName
を生成しSystem.Char[]
ます。
複数の文字で使用するとエラーが発生するため(
[char]"ab"
)
PowerShellには[char]
リテラルがなく、文字列([string]
)リテラルのみがあります。1文字を表す-に文字列をキャストすると[char]
、1文字の文字列のみが受け入れられます。たとえば、[char] 'a'
機能しますが[char] 'ab'
、[char] "ab"
機能しません。
しかし、私が使用する場合
[char[]]"ab"
...
文字列を文字の配列にキャストすると、文字列の個々の文字で構成される文字配列が返されます。
言い換えると、:[char[]] "ab"
はと同等"ab".ToCharArray()
です。
Get-Member
両方を比較すると、結果は得られません。
その理由は、それがあるGet-Member
上で動作するタイプの入力オブジェクトの、入力オブジェクトがある場合、型リテラルなど-[char]
と[char[]]
-その型がある、検査されるSystem.RuntimeType
から派生していること、非公共PowerShellのタイプSystem.Reflection.TypeInfo
の.NET説明、タイプ。
言い換えると、パイプされたすべての型リテラルGet-Member
は、参照する特定の型に関係なく、同じ出力になります。これは、メンバーが報告されている唯一の型記述型であるためです。
したがって、異なるタイプのリテラルを使用したCompare-Object
onGet-Member
呼び出しを使用すると、呼び出しの結果が同じになるため、予想どおりに出力が生成されません[1]。(出力を生成しないことは、違いが検出されなかったことを示す方法です。)Get-Member
Compare-Object
[1]は、入力オブジェクトのタイプのメンバーごとに1つずつGet-Member
、Microsoft.PowerShell.Commands.MemberDefinition
インスタンスの配列を出力します。に渡された引数がない場合、これらのインスタンスは、値によって全体として比較され、各メンバーの意味のある表現が生成されます。-Property
Compare-Object
.ToString()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加