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,7621 gold badge24 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,1873 gold badges29 silver badges41 bronze badges
answered Mar 14, 2017 at 11:22
tym32167tym32167
4,5912 gold badges28 silver badges32 bronze badges
0
- Remove From My Forums
-
Question
-
Hi
I am Trying to Play an Video in the Windows Mobile 6 by using this code
MediaPlayer player = new MediaPlayer();
Uri UriStr = new Uri(«http://192.168.1.5/audio/abc.wmv»);
player.Open(UriStr);
VideoDrawing aVideoDrawing = new VideoDrawing();
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
aVideoDrawing.Player = player;
// Play the video once.
player.Play();
And I have added Reference to System.dll , Presentaioncore.dll ,
But
when I build this I am getting 3 errors
1)error CS0012: The type ‘System.Uri’ is defined in an assembly that is not referenced. You must add a reference to assembly ‘System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.
2)error CS1502: The best overloaded method match for ‘System.Windows.Media.MediaPlayer.Open(System.Uri)’ has some invalid arguments
3)error CS1503: Argument ‘1’: cannot convert from ‘System.Uri [c:Program FilesMicrosoft.NETSDKCompactFrameworkv3.5WindowsCESystem.dll]’ to ‘System.Uri []’
Answers
-
The reason for this issue is what you’re trying to use desktop DLL on NETCF and this is not going to work.
That is, you can’t use this code at all. You also cannot add reference to Presentaioncore.dll, it’s a desktop DLL.You need to remove this code and replace it with something which is device compatible.
Say, there’s an article about hosting MP control on NETCF on MSDN. Keep in mind it is rather complex and requires advanced skills.
This posting is provided «AS IS» with no warranties, and confers no rights.
-
Marked as answer by
Tuesday, May 12, 2009 7:43 AM
-
Marked as answer by
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; } } |
#.net #list #dictionary #hashset #icollection
Вопрос:
Ответила @Hoshani в ответе.
Я разработал Dictionary
структуру строкового ключа для коллекции, которая может быть a List
или a HashSet
. Оба являются string
коллекциями, даже ключ словаря-a string
.
Я попытался создать универсальный метод для добавления к определенному ключу в словаре определенного элемента в коллекцию. Но его даже не удалось скомпилировать.
Проблема, по-видимому, заключается не в общем определении коллекции, а в объявлении словаря и коллекции. Я не могу продолжать и не могу понять, что я делаю не так. Мне нужна помощь. Это и есть код:
using System; using System.Collections.Generic; // NO COMPILE ERROR CS1503 void AddToCollectionlt;T,Ugt;(U item, U key, Dictionarylt;U, ICollectionlt;Ugt;gt; dict) where T : ICollectionlt;Ugt;, new() { if (key is not null) dict[item] = new T(){item}; else dict[key].Add(item); } var diccHS = new Dictionarylt;string, HashSetlt;stringgt;gt;(); var diccLIST = new Dictionarylt;string, Listlt;stringgt;gt;(); // This two sentences DOES NOT COMPILE AddToCollectionlt;HashSetlt;stringgt;, stringgt;("item1", "item", diccHS); AddToCollectionlt;Listlt;stringgt;, stringgt;("item1", "item", diccLIST); // COMPILE OK - HERE THE CAST COMPILE void testlt;T,Ugt;( ICollectionlt;Ugt; col) where T : ICollectionlt;Ugt;, new() { var hs2 = new T(); } var hset1 = new HashSetlt;stringgt;{"hh"}; var list1 = new Listlt;stringgt;{"hh"}; testlt;HashSetlt;stringgt;, stringgt;(hset1); testlt;Listlt;stringgt;, stringgt;(list1);
Спасибо
Комментарии:
1. Вместо того, чтобы редактировать вопрос, чтобы отметить, что на него был дан ответ, пожалуйста, отметьте ответ как принятый (значок галочки). Это автоматически обновит заголовок вопроса, чтобы отметить, что на него был дан ответ, и ответчик получит некоторую оценку репутации за предоставление полезного ответа.
Ответ №1:
В основном вы хотите сказать, Dictionarylt;U, ICollectionlt;Ugt;gt;
что часть значения словаря может быть любого типа ICollection
для каждой пары значений ключа.
Однако в коде var diccHS = new Dictionarylt;string, HashSetlt;stringgt;gt;()
вы ограничиваете этот тип HashSet
только
например, приведенный ниже код не создаст возникшую у вас проблему
var keyValuePairs = new Dictionarylt;string, ICollectionlt;stringgt;gt;(){ {"key", new HashSetlt;stringgt;()}, {"key2", new Listlt;stringgt;()} }; AddToCollectionlt;HashSetlt;stringgt;, stringgt;("item1", "item", keyValuePairs);
Сказав это, я думаю, что в своем вопросе вы хотели, чтобы все значения имели один и тот же тип, для этого вам следует исправить вторую часть словаря следующим образом :
void AddToCollectionlt;T, Ugt;(U item, U key, Dictionarylt;U, Tgt; dict) where T : ICollectionlt;Ugt;, new() { if (key is not null) dict[item] = new T() { item }; else dict[key].Add(item); }
Комментарии:
1. Вы правы! Теперь это работает. Неправильное определение. Спасибо
2. @Santi если это решит ваш вопрос, пожалуйста, отметьте его как ответ. заранее спасибо
#c_sharp
Собственно у DXMenuItem есть конструктор с параметрами string, void.Так вот ему не нравится как я вызываю функцию Count с параметрами.Не может конвертировать тип.Как мне правильно вызвать функцию с параметрами?Подозреваю что надо использовать лямбда-функцию,но не уверен.
Ответы
Ответ 1
У конструктора DxMenuItem, всего две перегрузки с двумя параметрами: DXMenuItem(string caption, DXMenuItemPriority priority) DXMenuItem(string caption, EventHandler click) Вероятнее всего имелась ввиду вторая перегрузка принимающая обработчик click. В этом случае действительно можно передать lambda new DxMenuItem(str, (s,e)=> Count(...))
Ответ 2
Дело в ожидаемых типах параметров конструктора DXMenuItem. Вряд ли тип второго параметра void (. Собственно у делегата DXMenuItem есть конструктор с параметрами string, void. Маловероятно также, что тип DXMenuItem является делегатом. Похоже, в процитированной фразе Вы пытаетесь описать сигнатуру метода: параметр - string, возвращаемое значение - void.
using System;
using UnityEngine;
using UnityEngine.InputSystem;
namespace platformer
{
public class HeroInput : MonoBehaviour
{
[SerializeField] private Hero _hero;
private HeroInputAction _inputActions;
private void Awake()
{
_inputActions = new HeroInputAction();
_inputActions.Hero.HorizontalMovement.performed += OnHorizontalMovement;
_inputActions.Hero.HorizontalMovement.canceled += OnHorizontalMovement;
_inputActions.Hero.SaySomething.performed += OnSaySomething;
}
private void OnEnable()
{
_inputActions.Enable();
}
private void OnHorizontalMovement(InputAction.CallbackContext context )
{
var direction = context.ReadValue<float>();
_hero.SetDirection(direction);
}
private void OnSaySomething(InputAction.CallbackContext context)
{
_hero.SaySomething();
}
}
}