Encoding.GetByteCountメソッドを使うことで文字列を任意の文字コードにエンコードしたときのバイト数を取得出来る。

using System;
using System.Text;

class Sample {
  static void Main()
  {
    string s = "ABCアイウあいう漢字";
    Encoding e = Encoding.GetEncoding("shift_jis");

    Console.WriteLine("Length = {0}", s.Length);
    Console.WriteLine("ByteCount = {0}", e.GetByteCount(s));
  }
}
Imports System
Imports System.Text

Class Sample
  Shared Sub Main()
    Dim s As String = "ABCアイウあいう漢字"
    Dim e As Encoding = Encoding.GetEncoding("shift_jis")

    Console.WriteLine("Length = {0}", s.Length)
    Console.WriteLine("ByteCount = {0}", e.GetByteCount(s))
  End Sub
End Class
実行結果
Length = 11
ByteCount = 16

文字ごとに1バイト文字か2バイト文字かを調べるためのメソッドは無いため、Encoding.GetByteCountメソッドを使って調べるには、String.Substringメソッドで一文字ずつ切り出して調べるか、いったんchar配列に変換して調べる必要がある。

using System;
using System.Text;

class Sample {
  static void Main()
  {
    string s = "ABCアイウあいう漢字";
    char[] chars = s.ToCharArray();
    Encoding e = Encoding.GetEncoding("shift_jis");

    for (int index = 0; index < chars.Length; index++) {
      Console.WriteLine("'{0}' - {1} byte(s)", chars[index], e.GetByteCount(chars, index, 1));
    }
  }
}
Imports System
Imports System.Text

Class Sample
  Shared Sub Main()
    Dim s As String = "ABCアイウあいう漢字"
    Dim chars() As Char = s.ToCharArray()
    Dim e As Encoding = Encoding.GetEncoding("shift_jis")

    For index As Integer = 0 To chars.Length - 1
      Console.WriteLine("'{0}' - {1} byte(s)", chars(index), e.GetByteCount(chars, index, 1))
    Next
  End Sub
End Class
実行結果
'A' - 1 byte(s)
'B' - 1 byte(s)
'C' - 1 byte(s)
'ア' - 1 byte(s)
'イ' - 1 byte(s)
'ウ' - 1 byte(s)
'あ' - 2 byte(s)
'い' - 2 byte(s)
'う' - 2 byte(s)
'漢' - 2 byte(s)
'字' - 2 byte(s)