.NET Core 2.0以降において、StartsWithおよびEndsWithメソッドは、IndexOf・LastIndexOfメソッドと同様にcharを引数にとるバージョンが用意されているため、文字単位で一致を調べることができます。

String.StartsWith・EndsWithメソッドで指定した文字で始まるか・終わるかを調べる (.NET Core 2.0以降)
using System;

class Sample {
  static void Main()
  {
    string s = "The quick brown fox jumps over the lazy dog";

    Console.WriteLine(s.StartsWith('T'));  // 文字列が'T'で始まるか
    Console.WriteLine(s.StartsWith('l'));  // 文字列が'l'で始まるか
    Console.WriteLine(s.EndsWith('g'));    // 文字列が'g'で終わるか
    Console.WriteLine(s.EndsWith('t'));    // 文字列が't'で終わるか
  }
}
実行結果
True
False
True
False

それ以外のバージョンでは、Contains・StartsWith・EndsWithの各メソッドにcharを引数にとるバージョンが用意されていないので、文字単位での一致を調べることはできません。 文字列が指定された文字で始まる/終わる/含むかどうかを調べるには、IndexOf・LastIndexOfメソッドを使う必要があります。

次の例は、IndexOf・LastIndexOfメソッドを使って、charを引数にとるContains・StartsWith・EndsWithメソッドを実装したものです。

using System;

class Sample {
  // 文字列sが指定された文字cを含むかどうか調べるメソッド
  static bool Contains(string s, char c)
  {
    return s.IndexOf(c) != -1;
  }

  // 文字列sが指定された文字cで始まるかどうか調べるメソッド
  static bool StartsWith(string s, char c)
  {
    return s.IndexOf(c) == 0;
    // もしくは単純に
    // return s[0] == c;
  }

  // 文字列sが指定された文字cで終わるかどうか調べるメソッド
  static bool EndsWith(string s, char c)
  {
    return s.LastIndexOf(c) == s.Length - 1;
    // もしくは単純に
    // return s[s.Length - 1] == c;
  }

  static void Main()
  {
    string s = "The quick brown fox jumps over the lazy dog";

    Console.WriteLine(Contains(s, 'f'));    // 文字列が'f'を含むか
    Console.WriteLine(Contains(s, 'A'));    // 文字列が'A'を含むか
    Console.WriteLine(StartsWith(s, 'T'));  // 文字列が'T'で始まるか
    Console.WriteLine(StartsWith(s, 'l'));  // 文字列が'l'で始まるか
    Console.WriteLine(EndsWith(s, 'g'));    // 文字列が'g'で終わるか
    Console.WriteLine(EndsWith(s, 't'));    // 文字列が't'で終わるか
  }
}
Imports System

Class Sample
  ' 文字列sが指定された文字cを含むかどうか調べるメソッド
  Shared Function Contains(ByVal s As String, ByVal c As Char) As Boolean
    Return s.IndexOf(c) <> -1
  End Function

  ' 文字列sが指定された文字cで始まるかどうか調べるメソッド
  Shared Function StartsWith(ByVal s As String, ByVal c As Char) As Boolean
    Return s.IndexOf(c) = 0
    ' もしくは単純に
    ' Return s(0) = c
  End Function

  ' 文字列sが指定された文字cで終わるかどうか調べるメソッド
  Shared Function EndsWith(ByVal s As String, ByVal c As Char) As Boolean
    Return s.LastIndexOf(c) = s.Length - 1
    ' もしくは単純に
    ' Return s(s.Length - 1) = c
  End Function

  Shared Sub Main()
    Dim s As String = "The quick brown fox jumps over the lazy dog"

    Console.WriteLine(Contains(s, "f"c))    ' 文字列が'f'を含むか
    Console.WriteLine(Contains(s, "A"c))    ' 文字列が'A'を含むか
    Console.WriteLine(StartsWith(s, "T"c))  ' 文字列が'T'で始まるか
    Console.WriteLine(StartsWith(s, "l"c))  ' 文字列が'l'で始まるか
    Console.WriteLine(EndsWith(s, "g"c))    ' 文字列が'g'で終わるか
    Console.WriteLine(EndsWith(s, "t"c))    ' 文字列が't'で終わるか
  End Sub
End Class
実行結果
True
False
True
False
True
False