67949
以下2つのTrimとTrim$や、MidとMid$等「$」のあるメソッドと「$」がないメソッドがありますが、動作は異なるのでしょうか。  
私としては、それぞれのメソッドにカーソルを当てると、どちらも「Function Trim(str As String) As
String」と表示されるので、実は同じメソッドが呼ばれているのではないかと思っています。

```

       Sub Main()
            Microsoft.VisualBasic.Strings.Trim(" abc ")
            Microsoft.VisualBasic.Strings.Trim$(" abc ")
       End Sub
    
```

※VB（6.0）やVBAではなく、Visual Basic（.NET）の場合です。  
※ターゲットフレームワークは4.7.2。OSはWindows 10です。
CC BY-SA 4.0
2020-06-24T06:01:12.927
67945
2020-06-24T07:57:40.437
19705
question
.net vb.net
Strings.TrimとStrings.Trim$その他「$」ありなしで動作は異なりますか
以下の記事が該当すると思われます。  
最後の **非$関数は、$関数とまったく同じように機能します。これは、古いコードとの下位互換性のためにのみ保持されています。** が当てはまるのでしょう。

[what is the meaning of the dollar sign after a method name in
vb.net](https://stackoverflow.com/q/8341524/9014308)  
問：

> what is the meaning of the dollar sign after a method name in vb.net  
>  vb.netのメソッド名の後のドル記号の意味は何ですか。  
>  like this:
```

>     Replace$("EG000000", "0", "")
>  
```

短い答え：

> Old type notifier - [see this](http://www.aivosto.com/vbtips/stringopt.html)  
>  古い型文字です  
>  Some other old ones:
```

>     & -> Long
>     % -> Integer
>     # -> Double
>     ! -> Single
>     @ -> Decimal
>     $ -> String
>  
```

>
> Still exist in VB.Net for the sake of backward compatibility...  
>  下位互換性のためにVB.Netにはまだ存在しています。
>
> COMMENT: For the sake of completeness, the [MSDN
> Link](http://msdn.microsoft.com/en-us/library/s9cz43ek%28v=VS.100%29.aspx).  
>  完全を期すために

長い答え:

> In "classic" VB, there were two versions of the built in-string functions.
> Let me use Left as an example:  
>  「クラシック」VBには、組み込みの文字列関数の2つのバージョンがありました。 例としてLeftを使用してみましょう：
>
>   * Left(s, length) takes a variant as the first parameter and returns a
> variant.
>   * Left$(s, length) takes a string as the first parameter and returns a
> string.
>

>
> This distinction still exists in modern-day VBA.  
>  この違いは、現在のVBAにも存在しています。
>
> I suspect that the reason behind this is that strings in VBA cannot be
> `Null` (note that `Null <> ""`). Thus, when dealing with nullable database
> fields, you had to use variant variables. Variant variables can take any
> value, including all of the integral values (strings, integers, ...) as well
> as some special values such as `Null`, `Empty` or `Missing`. The non-$
> functions allowed you to use variants as input and get variants as output.
> For example, `Left(Null, ...)` returns `Null`.  
>  これの背後にある理由は、VBA内の文字列を`Null`にすることはできないためだと思います（`Null <> ""
> `に注意してください）。したがって、null許容データベースフィールドを処理するときは、バリアント変数を使用する必要がありました。バリアント変数は、すべての整数値（文字列、整数など）や、
> `Null`、` Empty`、
> `Missing`などの特別な値を含む任意の値を取ることができます。非$関数を使用すると、バリアントを入力として使用し、バリアントを出力として取得できます。
> たとえば、 `Left（Null、...）`は `Null`を返します。
>
> In VB.NET, this distinction is no longer necessary: The non-$ functions do
> exactly the same as the $ functions, which are kept only for backwards
> compatibility with old code.  
>
> VB.NETでは、この区別は不要になりました。非$関数は、$関数とまったく同じように機能します。これは、古いコードとの下位互換性のためにのみ保持されています。
CC BY-SA 4.0
2020-06-24T07:57:40.437
67949
2020-06-24T07:57:40.437
26370
67945
answer