から末尾にスペースがある値にアクセスしようとするとDataTable、C# はそれを認識できません。明確にするために、value変数 in:Select(columnName + " = '" + value + "'")[0][newColumnName].ToString();の末尾にスペースを入れないでください。そうしないと、C# で不正確な結果が生成されます。
問題は、問題なく動作する LINQ に相当するものがありますが、同等の「セット」関数を作成する方法がわかりません。
したがって、答えは、C# でこの明らかなバグを修正する方法か、同等の LINQset()関数を LINQ にget()(つまり、 を使用せずにSelect()) 記述するのに役立ちます。どちらのソリューションもさらに優れています。
私がこれまでに持っているものを示し、バグを再現するために使用できる完全に機能するコードを次に示します。私が得る出力は次のとおりです:緑、赤、赤、また赤....あるべきとき:緑、赤、また赤、また赤
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace datatable_trailing_space_bug
{
    class Program
    {
        static void Main(string[] args)
        {
            SuperDataTable table = new SuperDataTable();
            /////////////////////////////
            table.Columns.Add("fruitName", typeof(string));
            table.Columns.Add("colour", typeof(string));
            //////////////  name, type, colour, length
            table.Rows.Add("apple", "green");
            table.Rows.Add("banana", "yellow");
            table.Rows.Add("strawberry", "red");
            table.Rows.Add("strawberry ", "also-red");
            Console.WriteLine(table._get_FAILS_ON_TRAILING_SPACE("fruitName", "apple", "colour"));          // This works - "green"
            Console.WriteLine(table._get_FAILS_ON_TRAILING_SPACE("fruitName", "strawberry", "colour"));     // This works - "red"
            Console.WriteLine(table._get_FAILS_ON_TRAILING_SPACE("fruitName", "strawberry ", "colour"));    // This fails due to trailing space - "red" (should be "also-red")
            Console.WriteLine(table._get_WORKS("fruitName", "strawberry ", "colour"));                      // This works - "also-red"
            Console.ReadLine();
        }
    }
    public class SuperDataTable : DataTable
    {
        public SuperDataTable()
        {
        }
        public string _get_FAILS_ON_TRAILING_SPACE(string columnName, string value, string newColumnName)       {
            value = value.Replace("'", "''");
            return Select(columnName + " = '" + value + "'")[0][newColumnName].ToString();
        }
        public void _set_FAILS_ON_TRAILING_SPACE(string columnName, string value, string newColumnName, string newValue) {
            value = value.Replace("'", "''");
            Select(columnName + "='" + value + "'")[0][newColumnName] = newValue;
        }
        public string _get_WORKS(string columnName, string value, string newColumnName) {
            string output = this.AsEnumerable()
                .Where(s => s.Field<string>(columnName).Equals(value))
                .Select(s => s.Field<string>(newColumnName)).FirstOrDefault();
            return output;
        }
        public void _set_WORKS(string columnName, string value, string newColumnName, string newValue) {
            // Enter working code here please.
        }
    }
}