Собственно у DXMenuItem есть конструктор с параметрами string, void.Так вот ему не нравится как я вызываю функцию Count с параметрами.Не может конвертировать тип.Как мне правильно вызвать функцию с параметрами?Подозреваю что надо использовать лямбда-функцию,но не уверен.
задан 25 окт 2018 в 16:38
KamaKama
414 бронзовых знака
3
У конструктора DxMenuItem
, всего две перегрузки с двумя параметрами:
DXMenuItem(string caption, DXMenuItemPriority priority)
DXMenuItem(string caption, EventHandler click)
Вероятнее всего имелась ввиду вторая перегрузка принимающая обработчик click.
В этом случае действительно можно передать lambda
new DxMenuItem(str, (s,e)=> Count(...))
ответ дан 25 окт 2018 в 17:09
Grundy♦Grundy
79.8k9 золотых знаков76 серебряных знаков133 бронзовых знака
1
Дело в ожидаемых типах параметров конструктора DXMenuItem
. Вряд ли тип второго параметра void
(.
Собственно у делегата DXMenuItem есть конструктор с параметрами
string, void.
Маловероятно также, что тип DXMenuItem
является делегатом. Похоже, в процитированной фразе Вы пытаетесь описать сигнатуру метода: параметр – string
, возвращаемое значение – void
.
ответ дан 25 окт 2018 в 17:00
2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
using System; using System.IO; using System.Collections.Generic; namespace Grapher { class Program { static void Main(string[] args) { string[] data = File.ReadAllLines("массив.txt"); int length = data[0].Split(';').Length, i; Graph graph = new Graph(); for (i = 0; i < length; i++) { string[] str = data[i].Split(';'); var vertices = new Dictionary<char, int>(); for (int j = 0; j < length; j++) if (Convert.ToInt32(str[j]) != 0) vertices.Add(Char.Parse((j + 1).ToString()), Convert.ToInt32(str[j])); graph.add_vertex(Char.Parse((i + 1).ToString()), vertices); } string start = Console.ReadLine(); // Номер начального пункта string end = Console.ReadLine(); // Номер конечного пункта var result = graph.all_ways(start, end, "", 0); using (var sw = new StreamWriter("результат.txt")) { foreach (var item in result) sw.WriteLine(item); sw.WriteLine("Кратчайшее расстояние равно " + graph.shortest_path(start, end)); } Console.Write("Результат был сохранен в файле результат.txt"); Console.ReadLine(); } } } class Graph { Dictionary<char, Dictionary<char, int>> vertices = new Dictionary<char, Dictionary<char, int>>(); public void add_vertex(char name, Dictionary<char, int> edges) { vertices[name] = edges; } public List<string> all_ways(char current, char end, string path, int weight) { List<string> pathes = new List<string>(); if (path.IndexOf(current.ToString() + " ") != -1) return pathes; else if (path == "") path = current.ToString() + " = 0"; else { int index = path.IndexOf("="); string temp = path.Substring(0, index); string sum = path.Substring(index + 1); weight += Convert.ToInt32(sum); path = temp + "-> " + current.ToString() + " = " + weight.ToString(); } if (current == end) { pathes.Add(path); return pathes; } foreach (KeyValuePair<char, int> pair in vertices[current]) { List<string> result = all_ways(pair.Key, end, path, pair.Value); if (result.Count != 0) pathes.AddRange(result); } return pathes; } public int shortest_path(char start, char finish) { var previous = new Dictionary<char, char>(); var distances = new Dictionary<char, int>(); var nodes = new List<char>(); List<char> path = null; foreach (var vertex in vertices) { if (vertex.Key == start) { distances[vertex.Key] = 0; } else { distances[vertex.Key] = int.MaxValue; } nodes.Add(vertex.Key); } while (nodes.Count != 0) { nodes.Sort((x, y) => distances[x] - distances[y]); var smallest = nodes[0]; nodes.Remove(smallest); if (smallest == finish) { path = new List<char>(); while (previous.ContainsKey(smallest)) { path.Add(smallest); smallest = previous[smallest]; } break; } if (distances[smallest] == int.MaxValue) { break; } foreach (var neighbor in vertices[smallest]) { var alt = distances[smallest] + neighbor.Value; if (alt < distances[neighbor.Key]) { distances[neighbor.Key] = alt; previous[neighbor.Key] = smallest; } } } if (path.Count > 0) return distances[path[0]]; else return 0; } } |
The compiler shows error
CS1503 Argument 1: cannot convert from ‘method group’ to ‘bool’.
I don’t understand why Console.WriteLine(Сalculate)
does not output. Thank you for answer.
The code here:
public static double Calculate(string userInput)
{
var parts = userInput.Split(' ');
var sum = double.Parse(parts[0]);
var rate = double.Parse(parts[1]);
var time = double.Parse(parts[2]);
return sum * (1 - Math.Pow(rate/ rate, time)) / (1 - rate/ rate);
}
static void Main()
{
Calculate(Console.ReadLine());
Console.ReadKey();
Console.WriteLine(Сalculate);
Console.ReadKey();
}
mrogal.ski
5,7901 gold badge21 silver badges30 bronze badges
asked Mar 14, 2017 at 11:16
3
You can do this:
static void Main()
{
// get result from your method
var result = Calculate(Console.ReadLine());
Console.ReadKey();
// print result
Console.WriteLine(result);
Console.ReadKey();
}
smn.tino
2,2324 gold badges31 silver badges41 bronze badges
answered Mar 14, 2017 at 11:22
tym32167tym32167
4,6512 gold badges28 silver badges32 bronze badges
0
Ошибку как исправить?
Вот такие ошибки:
Ошибка CS1503 Аргумент 1: не удается преобразовать из “string” в “char”.
Ошибка CS1503 Аргумент 1: не удается преобразовать из “string” в “char”.
Ошибка CS1503 Аргумент 2: не удается преобразовать из “string” в “char”.
Ошибка CS1503 Аргумент 2: не удается преобразовать из “string” в “char”.
using System; using System.IO; using System.Collections.Generic; namespace Grapher { class Program { static void Main(string[] args) { string[] data = File.ReadAllLines("массив.txt"); int length = data[0].Split(';').Length, i; Graph graph = new Graph(); for (i = 0; i < length; i++) { string[] str = data[i].Split(';'); var vertices = new Dictionary<char, int>(); for (int j = 0; j < length; j++) if (Convert.ToInt32(str[j]) != 0) vertices.Add(Char.Parse((j + 1).ToString()), Convert.ToInt32(str[j])); graph.add_vertex(Char.Parse((i + 1).ToString()), vertices); } string start = Console.ReadLine(); // Номер начального пункта string end = Console.ReadLine(); // Номер конечного пункта var result = graph.all_ways(start, end, "", 0); using (var sw = new StreamWriter("результат.txt")) { foreach (var item in result) sw.WriteLine(item); sw.WriteLine("Кратчайшее расстояние равно " + graph.shortest_path(start, end)); } Console.Write("Результат был сохранен в файле результат.txt"); Console.ReadLine(); } } } class Graph { Dictionary<char, Dictionary<char, int>> vertices = new Dictionary<char, Dictionary<char, int>>(); public void add_vertex(char name, Dictionary<char, int> edges) { vertices[name] = edges; } public List<string> all_ways(char current, char end, string path, int weight) { List<string> pathes = new List<string>(); if (path.IndexOf(current.ToString() + " ") != -1) return pathes; else if (path == "") path = current.ToString() + " = 0"; else { int index = path.IndexOf("="); string temp = path.Substring(0, index); string sum = path.Substring(index + 1); weight += Convert.ToInt32(sum); path = temp + "-> " + current.ToString() + " = " + weight.ToString(); } if (current == end) { pathes.Add(path); return pathes; } foreach (KeyValuePair<char, int> pair in vertices[current]) { List<string> result = all_ways(pair.Key, end, path, pair.Value); if (result.Count != 0) pathes.AddRange(result); } return pathes; } public int shortest_path(char start, char finish) { var previous = new Dictionary<char, char>(); var distances = new Dictionary<char, int>(); var nodes = new List<char>(); List<char> path = null; foreach (var vertex in vertices) { if (vertex.Key == start) { distances[vertex.Key] = 0; } else { distances[vertex.Key] = int.MaxValue; } nodes.Add(vertex.Key); } while (nodes.Count != 0) { nodes.Sort((x, y) => distances[x] - distances[y]); var smallest = nodes[0]; nodes.Remove(smallest); if (smallest == finish) { path = new List<char>(); while (previous.ContainsKey(smallest)) { path.Add(smallest); smallest = previous[smallest]; } break; } if (distances[smallest] == int.MaxValue) { break; } foreach (var neighbor in vertices[smallest]) { var alt = distances[smallest] + neighbor.Value; if (alt < distances[neighbor.Key]) { distances[neighbor.Key] = alt; previous[neighbor.Key] = smallest; } } } if (path.Count > 0) return distances[path[0]]; else return 0; } }
Прежде чем ответить, я снова и снова проверял свой код, а также около часа искал похожий ответ. Компилятор продолжает выдавать ошибку CS1503, я не совсем уверен, как это исправить. Это строки 36 и 37, и я прокомментировал строки с ошибками 36 и 37. Он предназначен для базы данных, которая должна искать номерной знак и выводить другие данные в таблицу.
public partial class Login : Form
{
string connectionString = @"Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=J:Plate ReaderDBInfoDB.mdf;Integrated Security=True;Connect Timeout=30";
SqlDataReader mdr;
public Login()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, EventArgs e)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
string selectQuery = "SELECT * From Plate WHERE Plate='" + txtPlate.Text;
SqlCommand command = new SqlCommand(selectQuery, sqlCon);
mdr = command.ExecuteReader();
if (mdr.Read())
{
labelName.Text = mdr.GetString("Name"); //Right here
labelWanted.Text = mdr.GetInt32("Bounty").ToString(); //and here
}
else
{
MessageBox.Show("No Data For This Plate");
}
}
}
}
3 ответа
Лучший ответ
Как объяснено в комментариях, GetString также GetInt32 требует параметр типа integer. Это целое число – позиция поля в списке выбора полей. Если вы не хотите использовать позицию, вы можете написать
labelName.Text = mdr.GetString(mdr.GetOrdinal("Name"));
И эту простую строку можно легко преобразовать в метод расширения, добавив метод в статический класс, чей код
public static class ReaderExtensions
{
public static string GetString(this SqlDataReader source, string fieldName)
{
return source.GetString(source.GetOrdinal(fieldName));
}
}
И это, наконец, позволяет писать
string labelText = mdr.GetString("Name");
Конечно, то же самое можно написать и для GetInt32, который принимает имя поля. Кстати, если я не ошибаюсь, версия MySql имеет эти перегрузки прямо в сборке
4
Steve
29 Дек 2018 в 19:33
GetInt32 ожидает параметр ‘int’.
Вы передаете в строке.
Вам необходимо отправить в порядковую позицию ваших столбцов.
Используйте это вместо:
mdr.GetInt32(mdr.GetOrdinal("Name"));
Возможно, вы захотите использовать микро ORM, например Dapper, чтобы упростить процесс.
1
KSK
29 Дек 2018 в 19:46