A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张振 中级黑马   /  2013-4-2 18:49  /  2391 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张振 于 2013-4-2 19:44 编辑

tom=400
lili=500
daniel=800
这是文本里面的内容
  private void btn_Click(object sender, EventArgs e)

        {
            string Maxname="";
            int MaxScore = 0;
            string[] lines = txt.Lines;
            foreach (string line in lines)
            {
                string[] str = line.Split('=');
                string name = str[0];
                int Score =Convert.ToInt32(str[1]);
                if (Score > MaxScore)
                {
                    MaxScore = Score;
                    Maxname = name;
                }

            }
            MessageBox.Show("最高成绩是{0}分数{1}", Maxname, MaxScore);

运行错误的提示:错误        1        与“System.Windows.Forms.MessageBox.Show(string, string, System.Windows.Forms.MessageBoxButtons)”最匹配的重载方法具有一些无效参数        
错误        2        参数“3”: 无法从“int”转换为“System.Windows.Forms.MessageBoxButtons”        

如果   MessageBox.Show(string.Format("最高成绩是{0}分数{1}", Maxname, MaxScore));加上string.Format就正确了
谁能告知一下 为什么要格式化 ,而且我没觉得格式有什么问题啊?
回帖有概率奖金币

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

9 个回复

倒序浏览
System.Windows.Forms.MessageBox.Show(string, string, System.Windows.Forms.MessageBoxButtons)”最匹配的重载方法具有一些无效参数        
错误

虽然我还没看到这个地方, 但是这里的提示已经很明确了, 你传递的参数有问题, 要么就是你使用的格式不正确
刚查看了一下, 貌似跟你的有点出入, 
但因为没看到,也不敢妄加揣测, 仔细看下那个方法的使用说明, 应该就可以解决了吧
回复 使用道具 举报
// MessageBox.Show("最高成绩是{0}分数{1}", "Maxname"," MaxScore");
  MessageBox.Show(string.Format("最高成绩是{0}分数{1}", "Maxname", " MaxScore"));

第一句报错“最匹配的重载方法具有一些无效参数  ”是因为你的参数不正确,呵呵这是废话。。。要知道解决方法就是当你输入 MessageBox.Show时加(时会提示方法重载,一共21个他不匹配这样的写法。所以报错。
第二句正确的原因是string.Format返回的类型是字符串。匹配了MessageBox.Show的第一个重载。

给你一个提示以后在调用方法时传参报“最匹配的重载方法具有一些无效参数  ”时,你要看下你传入的参数值类型和个数,在查看当前调用方法的重载,在决定如何修改。
回复 使用道具 举报
原因:
1、MessageBox.Show("最高成绩是{0}分数{1}", Maxname, MaxScore);这样写,编译器误以为传了3个参数,而实际中不存在3个string参数的Show方法,故报错。
2、MessageBox.Show方法,不能识别占位符;string.Format方法,能识别占位符

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
DWC_5101 发表于 2013-4-2 19:26
原因:
1、MessageBox.Show("最高成绩是{0}分数{1}", Maxname, MaxScore);这样写,编译器误以为传了3个参数 ...

message.show是不能识别占位符的啊?~~~~
回复 使用道具 举报
本帖最后由 DWC_5101 于 2013-4-2 19:41 编辑
张振 发表于 2013-4-2 19:32
message.show是不能识别占位符的啊?~~~~

是的。
因为Message.Show存在传两个string参数的形式,如果允许有占位符,比如有1个占位符,编译器就不知道两个string参数,后面的那个参数到底是占位符参数还是非占位符参数。
为防止上面混乱情况,故不支持占位符。

点评

嗯 懂了  发表于 2013-4-2 19:40
回复 使用道具 举报

回帖奖励 +10 黑马币

DWC_5101 发表于 2013-4-2 19:39
是的。
因为Message.Show存在传两个string参数的形式,如果允许有占位符,比如有1个占位符,编译器就不知 ...

奖励金币吧,哈哈
回复 使用道具 举报
只为中奖~~~~~~~~!!!!!!!
回复 使用道具 举报
因为Message.Show存在传两个string参数的形式,如果允许有占位符,比如有1个占位符,编译器就不知道两个string参数,后面的那个参数到底是占位符参数还是非占位符参数。
为防止上面混乱情况,故不支持占位符。
回复 使用道具 举报
因为Message.Show存在传两个string参数的形式,如果允许有占位符,比如有1个占位符,编译器就不知道两个string参数,后面的那个参数到底是占位符参数还是非占位符参数。
为防止上面混乱情况,故不支持占位符
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马