C# CharArray(); //因此,我将循环到其中一个数组的最大长度 //记住它们都是一样长的 for(int i=0;ichar.IsLetter(c)?((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),c.ToString(),true))).ToString():c.ToString()); } /// ///遍历LetterNumber值并替换传入的电话号码中的值。 /// ///遍历枚举名称和应用的字符串。替换 /// ///要解析的电话号码 ///将字母解析为数字值的电话号码输出 专用字符串ParsePhoneNumber_替换(字符串str) { str=str.ToUpper();//我们将比较所有大写字母 foreach(Enum.GetNames中的字符串字母(typeof(LetterNumber))) str=str.Replace(letter.ToUpper(),((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),letter)).ToString(); 返回str; } 你到底想做什么?所以,从2008年开始解决家庭作业对不起,我更新了这篇文章,希望它现在更容易理解。我正在寻找foreach循环中代码的帮助。我将它设置为查看每个字符,如果字符是一个字母,我希望它返回枚举的值。我已经尝试了switch语句和AlphaNumber。处于活动状态,但两者都无法正常工作。很抱歉,我没有很好地解释我的需要,但已经更新,希望没有更清楚。我希望使用枚举更新电话号码的字符值,这些字符值是字母的数字。我尝试使用开关或.Active代码来完成,但不断收到错误消息。我有一些我尝试过但没有成功的代码被注释掉了,但是它在那里,可能可以通过一些小的调整来使用。我看了你的例子,看了一个视频,阅读了一些帮助理解的内容,但是还需要进一步研究它们才能使用,因为我现在还没有完全理解所有的代码。我遵循大多数,但有几个项目我不确定,我真的想确保我在使用前理解。我真的很想坚持我们正在讨论的概念,但是如果我不能解决问题,我会试试这个。谢谢你的回复。我必须在早上工作,所以下班后我会试试这个。虽然我现在不需要完成这个项目,但我想让你知道我可以使用它的一个变体,我只需要将它分配回实际手机中的ch变量#。看起来您做了一些修改,但我必须删除'=null',因为我得到了一个错误,以便让它工作。这很简单,但效果非常好。欢迎使用StackOverflow@SOReadyToHelp如果我的回答有帮助,请将其标记为已接受,您将获得两个额外的声誉积分。我尝试了没有开关的选项,但它仍然返回字母而不是数字。我将调用该方法的语句放在foreach循环中。字母音素表成员2(ch);有什么建议我可能做错了吗?@cccstudent我刚刚用第二个字符“AlphaPhoneChartonMember”替换了字符操作“AlphaPhoneChartonMember”,我得到了数字?不能用小写字符回答你的问题Chris,在这部分作业之前我用过ToUpper,因此,我只使用了两个带有大写字母和数字的数组,我无法让它工作,并计划继续使用您的建议,因为代码对我来说是有意义的,我觉得它应该工作,但现在我不需要完成,但仍想继续 public enum AlphaNumber { A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9 } private void UpdatePhone(AlphaNumber phone) { switch (phone) { case AlphaNumber.A: //return AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber)); //return (Enum.GetValues(typeof(AlphaNumber))); // (int)ValueType; Enum.GetValues(typeof(AlphaNumber)); break; } private void translateButton_Click(object sender, EventArgs e) { numberLabel.Text = "";//Clear the numberLabel //Get a trimmed copy of the user's input. string input = numberTextBox.Text.Trim(); if (IsValidFormat(input)) { Unformat(ref input); foreach (char ch in input) { if (char.IsLetter(ch))// { ch = (char)Enums.AlphaNumber.Active; //ch = (char)Enum.GetValues(typeof(AlphaNumber)); //ch = Enum.TryParse(AlphaNumber); // ch = AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber)); //UpdatePhone(ch); MessageBox.Show("Character is char"); } } TelephoneFormat(ref input); numberLabel.Text = input; Console.WriteLine(String.Join("", // combine characters back to string "555-GET-FOOD" //value .ToUpperInvariant() // carefully converting to avoid Turkish I problems .Select(c=> (c>='A' && c<='Z') ? // only tweak A-Z range Math.Min((c-'A')/3+2,9).ToString()[0] : c))) public enum AlphaNumber { A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9 } public static class PhoneNumber { public static char ParseInput(char input) { if (input == '-' || char.IsDigit(input)) { return input; } if (char.IsLetter(input)) { var num = (AlphaNumber)(Enum.Parse(typeof(AlphaNumber), (char.IsLower(input) ? char.ToUpperInvariant(input) : input).ToString())); return ((int)num).ToString()[0]; } return '\0'; } } AlphaNumber parsedCh; int? chValue = null; if (Enum.TryParse(ch.ToString().ToUpper(), out parsedCh)) { chValue = (int)parsedCh; Console.WriteLine(chValue); } using System; public class Program { public static void Main() { Console.WriteLine(AlphaPhoneToNumber("555-GET-FOOD")); } public static string AlphaPhoneToNumber(string val){ //strings are immutable so let's get the array version of the value var phoneNumberArr = val.ToCharArray(); for(int i = 0; i < val.Length; i++){ phoneNumberArr[i] = AlphaPhoneCharToNumber(phoneNumberArr[i]); } return new string(phoneNumberArr); } public static char AlphaPhoneCharToNumber(char val){ switch(val){ case 'A': case 'B': case 'C': return '2'; case 'D': case 'E': case 'F': return '3'; case 'G': case 'H': case 'I': return '4'; case 'J': case 'K': case 'L': return '5'; case 'M': case 'N': case 'O': return '6'; case 'P': case 'Q': case 'R': return '7'; case 'S': case 'T': case 'U': return '8'; case 'V': case 'W': case 'X': case 'Y': case 'Z': return '9'; default: return val; } } } public static char AlphaPhoneCharToNumber2(char val){ // All three arrays are of exact same length var ualphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); var lalphas = "abcdefghijklmnopqrstuvwxyz".ToCharArray(); var numval = "22233344455566677788899999".ToCharArray(); // thus I will loop up to the max length of one of the arrays // remember they are all the same length for(int i = 0; i < ualphas.Length; i++){ //I will check if the value is in one of the alphabet //arrays at the current index //if there is a match I will assign it the number value //at the same index // MATCH UPPER? MATCH LOWER? RETURN NUMBER if(ualphas[i] == val || lalphas[i] == val) return numval[i]; } // ELSE RETURN THE ORIGINAL VALUE return val; } /// <summary> /// Iterates through the characters in a phone number converting letters to digits. /// </summary> /// <remarks>Uses StringBuilder to build the output iteratively, this method does not attempt to validate the number passed in</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_StringBuilder(string str) { StringBuilder output = new StringBuilder(); foreach (char ch in str.ToCharArray()) { // Convert each letter to it's numeric value as defined in the LetterNumber enum // Dashes are not letters so they will get passed through if (char.IsLetter(ch)) { if (Enum.IsDefined(typeof(LetterNumber), ch.ToString())) { LetterNumber letterNumber = (LetterNumber)Enum.Parse(typeof(LetterNumber), ch.ToString(), true); output.Append((int)letterNumber); } } else output.Append(ch); } return output.ToString(); } /// <summary> /// Uses Linq to parse the characters in a phone number converting letters to digits. /// </summary> /// <remarks>This method does not attempt to validate the number passed in</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_Linq(string str) { return String.Join("", str.Select(c => char.IsLetter(c) ? ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), c.ToString(), true))).ToString() : c.ToString())); } /// <summary> /// Iterates through the LetterNumber values and replaces values found in the passed in phone number. /// </summary> /// <remarks>Iterates through Enum Names and applied String.Replace</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_Replacement(string str) { str = str.ToUpper(); // we will compare all letters in upper case foreach (string letter in Enum.GetNames(typeof(LetterNumber))) str = str.Replace(letter.ToUpper(), ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), letter))).ToString()); return str; }

C# CharArray(); //因此,我将循环到其中一个数组的最大长度 //记住它们都是一样长的 for(int i=0;ichar.IsLetter(c)?((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),c.ToString(),true))).ToString():c.ToString()); } /// ///遍历LetterNumber值并替换传入的电话号码中的值。 /// ///遍历枚举名称和应用的字符串。替换 /// ///要解析的电话号码 ///将字母解析为数字值的电话号码输出 专用字符串ParsePhoneNumber_替换(字符串str) { str=str.ToUpper();//我们将比较所有大写字母 foreach(Enum.GetNames中的字符串字母(typeof(LetterNumber))) str=str.Replace(letter.ToUpper(),((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),letter)).ToString(); 返回str; } 你到底想做什么?所以,从2008年开始解决家庭作业对不起,我更新了这篇文章,希望它现在更容易理解。我正在寻找foreach循环中代码的帮助。我将它设置为查看每个字符,如果字符是一个字母,我希望它返回枚举的值。我已经尝试了switch语句和AlphaNumber。处于活动状态,但两者都无法正常工作。很抱歉,我没有很好地解释我的需要,但已经更新,希望没有更清楚。我希望使用枚举更新电话号码的字符值,这些字符值是字母的数字。我尝试使用开关或.Active代码来完成,但不断收到错误消息。我有一些我尝试过但没有成功的代码被注释掉了,但是它在那里,可能可以通过一些小的调整来使用。我看了你的例子,看了一个视频,阅读了一些帮助理解的内容,但是还需要进一步研究它们才能使用,因为我现在还没有完全理解所有的代码。我遵循大多数,但有几个项目我不确定,我真的想确保我在使用前理解。我真的很想坚持我们正在讨论的概念,但是如果我不能解决问题,我会试试这个。谢谢你的回复。我必须在早上工作,所以下班后我会试试这个。虽然我现在不需要完成这个项目,但我想让你知道我可以使用它的一个变体,我只需要将它分配回实际手机中的ch变量#。看起来您做了一些修改,但我必须删除'=null',因为我得到了一个错误,以便让它工作。这很简单,但效果非常好。欢迎使用StackOverflow@SOReadyToHelp如果我的回答有帮助,请将其标记为已接受,您将获得两个额外的声誉积分。我尝试了没有开关的选项,但它仍然返回字母而不是数字。我将调用该方法的语句放在foreach循环中。字母音素表成员2(ch);有什么建议我可能做错了吗?@cccstudent我刚刚用第二个字符“AlphaPhoneChartonMember”替换了字符操作“AlphaPhoneChartonMember”,我得到了数字?不能用小写字符回答你的问题Chris,在这部分作业之前我用过ToUpper,因此,我只使用了两个带有大写字母和数字的数组,我无法让它工作,并计划继续使用您的建议,因为代码对我来说是有意义的,我觉得它应该工作,但现在我不需要完成,但仍想继续 public enum AlphaNumber { A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9 } private void UpdatePhone(AlphaNumber phone) { switch (phone) { case AlphaNumber.A: //return AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber)); //return (Enum.GetValues(typeof(AlphaNumber))); // (int)ValueType; Enum.GetValues(typeof(AlphaNumber)); break; } private void translateButton_Click(object sender, EventArgs e) { numberLabel.Text = "";//Clear the numberLabel //Get a trimmed copy of the user's input. string input = numberTextBox.Text.Trim(); if (IsValidFormat(input)) { Unformat(ref input); foreach (char ch in input) { if (char.IsLetter(ch))// { ch = (char)Enums.AlphaNumber.Active; //ch = (char)Enum.GetValues(typeof(AlphaNumber)); //ch = Enum.TryParse(AlphaNumber); // ch = AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber)); //UpdatePhone(ch); MessageBox.Show("Character is char"); } } TelephoneFormat(ref input); numberLabel.Text = input; Console.WriteLine(String.Join("", // combine characters back to string "555-GET-FOOD" //value .ToUpperInvariant() // carefully converting to avoid Turkish I problems .Select(c=> (c>='A' && c<='Z') ? // only tweak A-Z range Math.Min((c-'A')/3+2,9).ToString()[0] : c))) public enum AlphaNumber { A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9 } public static class PhoneNumber { public static char ParseInput(char input) { if (input == '-' || char.IsDigit(input)) { return input; } if (char.IsLetter(input)) { var num = (AlphaNumber)(Enum.Parse(typeof(AlphaNumber), (char.IsLower(input) ? char.ToUpperInvariant(input) : input).ToString())); return ((int)num).ToString()[0]; } return '\0'; } } AlphaNumber parsedCh; int? chValue = null; if (Enum.TryParse(ch.ToString().ToUpper(), out parsedCh)) { chValue = (int)parsedCh; Console.WriteLine(chValue); } using System; public class Program { public static void Main() { Console.WriteLine(AlphaPhoneToNumber("555-GET-FOOD")); } public static string AlphaPhoneToNumber(string val){ //strings are immutable so let's get the array version of the value var phoneNumberArr = val.ToCharArray(); for(int i = 0; i < val.Length; i++){ phoneNumberArr[i] = AlphaPhoneCharToNumber(phoneNumberArr[i]); } return new string(phoneNumberArr); } public static char AlphaPhoneCharToNumber(char val){ switch(val){ case 'A': case 'B': case 'C': return '2'; case 'D': case 'E': case 'F': return '3'; case 'G': case 'H': case 'I': return '4'; case 'J': case 'K': case 'L': return '5'; case 'M': case 'N': case 'O': return '6'; case 'P': case 'Q': case 'R': return '7'; case 'S': case 'T': case 'U': return '8'; case 'V': case 'W': case 'X': case 'Y': case 'Z': return '9'; default: return val; } } } public static char AlphaPhoneCharToNumber2(char val){ // All three arrays are of exact same length var ualphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); var lalphas = "abcdefghijklmnopqrstuvwxyz".ToCharArray(); var numval = "22233344455566677788899999".ToCharArray(); // thus I will loop up to the max length of one of the arrays // remember they are all the same length for(int i = 0; i < ualphas.Length; i++){ //I will check if the value is in one of the alphabet //arrays at the current index //if there is a match I will assign it the number value //at the same index // MATCH UPPER? MATCH LOWER? RETURN NUMBER if(ualphas[i] == val || lalphas[i] == val) return numval[i]; } // ELSE RETURN THE ORIGINAL VALUE return val; } /// <summary> /// Iterates through the characters in a phone number converting letters to digits. /// </summary> /// <remarks>Uses StringBuilder to build the output iteratively, this method does not attempt to validate the number passed in</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_StringBuilder(string str) { StringBuilder output = new StringBuilder(); foreach (char ch in str.ToCharArray()) { // Convert each letter to it's numeric value as defined in the LetterNumber enum // Dashes are not letters so they will get passed through if (char.IsLetter(ch)) { if (Enum.IsDefined(typeof(LetterNumber), ch.ToString())) { LetterNumber letterNumber = (LetterNumber)Enum.Parse(typeof(LetterNumber), ch.ToString(), true); output.Append((int)letterNumber); } } else output.Append(ch); } return output.ToString(); } /// <summary> /// Uses Linq to parse the characters in a phone number converting letters to digits. /// </summary> /// <remarks>This method does not attempt to validate the number passed in</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_Linq(string str) { return String.Join("", str.Select(c => char.IsLetter(c) ? ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), c.ToString(), true))).ToString() : c.ToString())); } /// <summary> /// Iterates through the LetterNumber values and replaces values found in the passed in phone number. /// </summary> /// <remarks>Iterates through Enum Names and applied String.Replace</remarks> /// <see cref="LetterNumber"/> /// <param name="str">Phone number to parse</param> /// <returns>Phone number output where letters have been parsed into their digit values</returns> private string ParsePhoneNumber_Replacement(string str) { str = str.ToUpper(); // we will compare all letters in upper case foreach (string letter in Enum.GetNames(typeof(LetterNumber))) str = str.Replace(letter.ToUpper(), ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), letter))).ToString()); return str; },c#,foreach,enums,switch-statement,C#,Foreach,Enums,Switch Statement,以下是一些简单逻辑选项,用于处理所述电话号码。 请注意,虽然采用了一种新的方法,但使用枚举将字母映射为整数值会使过程变得更加复杂 即使存在专门映射字母数字电话号码的其他方法(想想Regex),如果您确实需要使用枚举名称和值进行迭代或处理,那么我希望您发现这些算法很有用 作为一个映射结构,字典要简单得多 表达式中定义了字母编号映射的正则表达式将再次优于正则表达式 // ///迭代电话号码中的字符,将字母转换为数字。 /// ///使用StringBuilder以迭代方式生成输出,此方法不会尝试验

以下是一些简单逻辑选项,用于处理所述电话号码。 请注意,虽然采用了一种新的方法,但使用枚举将字母映射为整数值会使过程变得更加复杂

即使存在专门映射字母数字电话号码的其他方法(想想Regex),如果您确实需要使用枚举名称和值进行迭代或处理,那么我希望您发现这些算法很有用

作为一个映射结构,字典要简单得多

表达式中定义了字母编号映射的正则表达式将再次优于正则表达式

//
///迭代电话号码中的字符,将字母转换为数字。
/// 
///使用StringBuilder以迭代方式生成输出,此方法不会尝试验证传入的数字
/// 
///要解析的电话号码
///将字母解析为数字值的电话号码输出
私有字符串ParsePhoneNumber\u StringBuilder(字符串str)
{
StringBuilder输出=新的StringBuilder();
foreach(字符串ToCharArray()中的字符)
{
//将每个字母转换为其在LetterNumber枚举中定义的数值
//破折号不是字母,所以它们会通过
if(字符(ch))
{
if(枚举已定义(typeof(LetterNumber),ch.ToString())
{
LetterNumber LetterNumber=(LetterNumber)Enum.Parse(typeof(LetterNumber),ch.ToString(),true);
输出。追加((int)字母编号);
}
}
其他的
输出追加(ch);
}
返回output.ToString();
}
/// 
///使用Linq解析电话号码中的字符,将字母转换为数字。
/// 
///此方法不会尝试验证传入的数字
/// 
///要解析的电话号码
///将字母解析为数字值的电话号码输出
私有字符串ParsePhoneNumber_Linq(字符串str)
{
返回String.Join(“,str.Select(c=>char.IsLetter(c)?((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),c.ToString(),true))).ToString():c.ToString());
}
/// 
///遍历LetterNumber值并替换传入的电话号码中的值。
/// 
///遍历枚举名称和应用的字符串。替换
/// 
///要解析的电话号码
///将字母解析为数字值的电话号码输出
专用字符串ParsePhoneNumber_替换(字符串str)
{
str=str.ToUpper();//我们将比较所有大写字母
foreach(Enum.GetNames中的字符串字母(typeof(LetterNumber)))
str=str.Replace(letter.ToUpper(),((int)((LetterNumber)Enum.Parse(typeof(LetterNumber),letter)).ToString();
返回str;
}

你到底想做什么?所以,从2008年开始解决家庭作业对不起,我更新了这篇文章,希望它现在更容易理解。我正在寻找foreach循环中代码的帮助。我将它设置为查看每个字符,如果字符是一个字母,我希望它返回枚举的值。我已经尝试了switch语句和AlphaNumber。处于活动状态,但两者都无法正常工作。很抱歉,我没有很好地解释我的需要,但已经更新,希望没有更清楚。我希望使用枚举更新电话号码的字符值,这些字符值是字母的数字。我尝试使用开关或.Active代码来完成,但不断收到错误消息。我有一些我尝试过但没有成功的代码被注释掉了,但是它在那里,可能可以通过一些小的调整来使用。我看了你的例子,看了一个视频,阅读了一些帮助理解的内容,但是还需要进一步研究它们才能使用,因为我现在还没有完全理解所有的代码。我遵循大多数,但有几个项目我不确定,我真的想确保我在使用前理解。我真的很想坚持我们正在讨论的概念,但是如果我不能解决问题,我会试试这个。谢谢你的回复。我必须在早上工作,所以下班后我会试试这个。虽然我现在不需要完成这个项目,但我想让你知道我可以使用它的一个变体,我只需要将它分配回实际手机中的ch变量#。看起来您做了一些修改,但我必须删除'=null',因为我得到了一个错误,以便让它工作。这很简单,但效果非常好。欢迎使用StackOverflow@SOReadyToHelp如果我的回答有帮助,请将其标记为已接受,您将获得两个额外的声誉积分。我尝试了没有开关的选项,但它仍然返回字母而不是数字。我将调用该方法的语句放在foreach循环中。字母音素表成员2(ch);有什么建议我可能做错了吗?@cccstudent我刚刚用第二个字符“AlphaPhoneChartonMember”替换了字符操作“AlphaPhoneChartonMember”,我得到了数字?不能用小写字符回答你的问题Chris,在这部分作业之前我用过ToUpper,因此,我只使用了两个带有大写字母和数字的数组,我无法让它工作,并计划继续使用您的建议,因为代码对我来说是有意义的,我觉得它应该工作,但现在我不需要完成,但仍想继续
public enum AlphaNumber
{ 
    A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, 
    M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9
}
 private void UpdatePhone(AlphaNumber phone)
    {
        switch (phone)
        {
            case AlphaNumber.A:
           //return AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber));
           //return (Enum.GetValues(typeof(AlphaNumber)));
           //   (int)ValueType;
                Enum.GetValues(typeof(AlphaNumber));
                break;                   
        }
private void translateButton_Click(object sender, EventArgs e)
    {
        numberLabel.Text = "";//Clear the numberLabel
        //Get a trimmed copy of the user's input.  
        string input = numberTextBox.Text.Trim();

        if (IsValidFormat(input))
        {
            Unformat(ref input);

            foreach (char ch in input)
            {
                if (char.IsLetter(ch))//                    {
                    ch = (char)Enums.AlphaNumber.Active;
                    //ch = (char)Enum.GetValues(typeof(AlphaNumber));
                    //ch = Enum.TryParse(AlphaNumber);
                   // ch = AlphaNumber.(int[])Enum.GetValues(typeof(AlphaNumber));
                    //UpdatePhone(ch);
                   MessageBox.Show("Character is char");                    }
            }

            TelephoneFormat(ref input);    
            numberLabel.Text = input;
 Console.WriteLine(String.Join("",  // combine characters back to string
       "555-GET-FOOD" //value
          .ToUpperInvariant() // carefully converting to avoid Turkish I problems
          .Select(c=> (c>='A' && c<='Z') ? // only tweak A-Z range
             Math.Min((c-'A')/3+2,9).ToString()[0] : c)))
    public enum AlphaNumber
    { 
        A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, 
        M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9
    }

    public static class PhoneNumber
    {
        public static char ParseInput(char input)
        {
            if (input == '-' || char.IsDigit(input))
            {
                return input;
            }

            if (char.IsLetter(input))
            {
                var num = (AlphaNumber)(Enum.Parse(typeof(AlphaNumber), (char.IsLower(input) ? char.ToUpperInvariant(input) : input).ToString()));
                return ((int)num).ToString()[0];
            }

            return '\0';
        }
    }
AlphaNumber parsedCh;
int? chValue = null;

if (Enum.TryParse(ch.ToString().ToUpper(), out parsedCh)) 
{
    chValue = (int)parsedCh;
    Console.WriteLine(chValue); 
}
using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(AlphaPhoneToNumber("555-GET-FOOD"));
    }

    public static string AlphaPhoneToNumber(string val){
        //strings are immutable so let's get the array version of the value
        var phoneNumberArr = val.ToCharArray();
        for(int i = 0; i < val.Length; i++){
            phoneNumberArr[i] = AlphaPhoneCharToNumber(phoneNumberArr[i]);
        }
        return new string(phoneNumberArr);
    }

    public static char AlphaPhoneCharToNumber(char val){
        switch(val){
            case 'A':
            case 'B':
            case 'C':
                return '2';
            case 'D':
            case 'E':
            case 'F':
                return '3';
            case 'G':
            case 'H':
            case 'I':
                return '4';
            case 'J':
            case 'K':
            case 'L':
                return '5';
            case 'M':
            case 'N':
            case 'O':
                return '6';
            case 'P':
            case 'Q':
            case 'R':
                return '7';
            case 'S':
            case 'T':
            case 'U':
                return '8';
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
                return '9';
            default: return val;

        }
    }
}
public static char AlphaPhoneCharToNumber2(char val){
    // All three arrays are of exact same length
    var ualphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
    var lalphas = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
    var numval =  "22233344455566677788899999".ToCharArray();
    // thus I will loop up to the max length of one of the arrays
    // remember they are all the same length
    for(int i = 0; i < ualphas.Length; i++){
        //I will check if the value is in one of the alphabet
        //arrays at the current index
        //if there is a match I will assign it the number value
        //at the same index
        // MATCH UPPER?         MATCH LOWER?              RETURN NUMBER
        if(ualphas[i] == val || lalphas[i] == val) return numval[i];
    }
    // ELSE RETURN THE ORIGINAL VALUE
    return val;
}
/// <summary>
/// Iterates through the characters in a phone number converting letters to digits.
/// </summary>
/// <remarks>Uses StringBuilder to build the output iteratively, this method does not attempt to validate the number passed in</remarks>
/// <see cref="LetterNumber"/>
/// <param name="str">Phone number to parse</param>
/// <returns>Phone number output where letters have been parsed into their digit values</returns>
private string ParsePhoneNumber_StringBuilder(string str)
{
    StringBuilder output = new StringBuilder();
    foreach (char ch in str.ToCharArray())
    {
        // Convert each letter to it's numeric value as defined in the LetterNumber enum
        // Dashes are not letters so they will get passed through
        if (char.IsLetter(ch))
        {
            if (Enum.IsDefined(typeof(LetterNumber), ch.ToString()))
            {
                LetterNumber letterNumber = (LetterNumber)Enum.Parse(typeof(LetterNumber), ch.ToString(), true);
                output.Append((int)letterNumber);
            }
        }
        else
            output.Append(ch);
    }
    return output.ToString();
}

/// <summary>
/// Uses Linq to parse the characters in a phone number converting letters to digits.
/// </summary>
/// <remarks>This method does not attempt to validate the number passed in</remarks>
/// <see cref="LetterNumber"/>
/// <param name="str">Phone number to parse</param>
/// <returns>Phone number output where letters have been parsed into their digit values</returns>
private string ParsePhoneNumber_Linq(string str)
{
    return String.Join("", str.Select(c => char.IsLetter(c) ? ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), c.ToString(), true))).ToString() : c.ToString()));
}

/// <summary>
/// Iterates through the LetterNumber values and replaces values found in the passed in phone number.
/// </summary>
/// <remarks>Iterates through Enum Names and applied String.Replace</remarks>
/// <see cref="LetterNumber"/>
/// <param name="str">Phone number to parse</param>
/// <returns>Phone number output where letters have been parsed into their digit values</returns>
private string ParsePhoneNumber_Replacement(string str)
{
    str = str.ToUpper(); // we will compare all letters in upper case
    foreach (string letter in Enum.GetNames(typeof(LetterNumber)))
        str = str.Replace(letter.ToUpper(), ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), letter))).ToString());
    return str;
}