Чтобы проверить, является ли var строковым типом

У меня проблема с кодом в С#:

Я не знаю, как реализовать логику - итерация через Hashtable со значениями разных типов данных, схема, которую я хочу, ниже:

if the value in variable is String type
{
 do action1;
}
else 
{
  do action2;
}

Существует хэш-таблица, содержащая данные типов - String и Int (объединенные):

public string SQLCondGenerator {

        get
        {

            Hashtable conditions = new Hashtable();

            //data having String data type
            conditions.Add("miap", ViewState["miap_txt"]);
            conditions.Add("pocode", ViewState["po_txt "]);
            conditions.Add("materialdescription", ViewState["mat_desc_txt"]);
            conditions.Add("suppliername", ViewState["supplier_txt"]);
            conditions.Add("manufacturername", ViewState["manufacturer_txt"]);

            //data having Int32 data type
            conditions.Add("spareparts", ViewState["sp_id"]); 
            conditions.Add("firstfills", ViewState["ff_id"]);
            conditions.Add("specialtools", ViewState["st_id"]);
            conditions.Add("ps_deleted", ViewState["ps_del_id"]);
            conditions.Add("po_manuallyinserted", ViewState["man_ins_id"]);

            String SQLCondString = "";
            String SQLCondStringConverted = "";


            string s = string.Empty;
            foreach (string name in conditions.Keys) 
            {
                if (conditions[name] != null)
                {
                    SQLCondString += name+ "=" +conditions[name]+ " and ";
                    Response.Write(conditions[name].GetType());

                    bool valtype = conditions[name].GetType().IsValueType;
                    if (valtype == string)
                    {
                      SQLCondString.Substring(0, SQLCondString.Length - 4);
                      SQLCondString += name + " and like '%" + conditions[name] + "%' and ";
                    }
                }
            }

        //Response.Write("********************");
         SQLCondStringConverted = SQLCondString.Substring(0, SQLCondString.Length - 4);
         return SQLCondStringConverted;
        }   
    }

Может быть, я ошибаюсь в кодировании, пожалуйста, советую!

Благодарю!

Ответ 1

if(conditions[name] is string)
{
}
else
{
}

Ответ 2

Хм, я не уверен, почему вы вызываете IsValueType, но этого должно быть достаточно:

if (conditions[name] is string) 
{
    ///  
}

Ответ 3

Подход - 1

Int32 Val = 0;
if (Int32.TryParse("Your Value", out Val))
{
    //Your Logic for int
}
else
{
    //Your Logic for String
}

Подход - 2 (с использованием позднего связывания)

Int32 Val = 0;
dynamic conditions = new Hashtable();
conditions.Add("miap", ViewState["miap_txt"]);
conditions.Add("pocode", ViewState["po_txt "]);
foreach (string name in conditions.Keys)
{
    if (Int32.TryParse(conditions[name].ToString(), out Val))
    {
        //Your Logic for int
    }
    else
    {
        //Your Logic for String
    }
}