Метод расширения в массиве не может быть сопоставлен при использовании аргументов `ref`
Ниже приведен код, с которым я работаю; он добавляет методы к встроенным типам, чтобы найти индекс элемента в массиве, если он находится в массиве. У меня проблема в том, что код для метода char[].IndexOf работает, но мой новый код для строки [,] - нет.
string [,]. IndexOf (строка из переменной, int x,int y);
Отображает ошибку: лучшее совпадение перегруженного метода для 'System.Array.IndexOf(int[], int, int)' имеет недопустимые аргументы. Аргумент 1: невозможно преобразовать строку 'string' в 'int[]'
Я не понимаю, в чем проблема. Я определил метод для получения строки, а не целочисленного массива, и тип не имеет встроенной функции IndexOf.
Выдержка из кода: (Не точный код, надеюсь, только то, что имеет значение)
Using Extensions;
namespace one
{
class Form
private static char[] Alp = {'s','f'};
private method1
{
int pos = Alp.IndexOf(char[x]);
}
private method2
{
string[,] theory = table of letters
theory.IndexOf(string_array[0], x, y);
}
namespace Extensions
{
public static class MyExtensions
{
//Add method IndexOf to builtin type char[] taking parameter char thing
public static int IndexOf(this char[] array, char thing)
{
for (int x = 0; x < array.Length; x++)
{
char element = array[x];
if (thing == element) { return x; }
}
return -1;
}
public static void IndexOf(this string[,] array, string find, ref int x, ref int y)
{
}
}
}
3 ответа
Ты не забыл ref
в вашем методе вызова?
theory.IndexOf(string_array[0], ref x, ref y);
Если x и y установлены вашим методом IndexOf, вы должны использовать вместо ref.
public static void IndexOf(this string[,] arr, string find, out int x, out int y)
{
}
// Then, you need to specify 'out' at the call site
theory.IndexOf(string_array[0], out x, out y);
Вы можете использовать Tuple, чтобы избежать отсутствия параметров:
public static Tuple<int, int> IndexOf(this string[,] array, string find)
{
// Logic here
return new Tuple(x, y);
}
public static void IndexOf(this string[,] array, string find, ref int x, ref int y)
Оказывается, потому что x и y запрашиваются по ссылке, они также должны вызываться с ключевым словом ref. Почему ошибка сказала, что первый параметр был неправильным, получил меня.
Спасибо всем, кто отправил ответы.