Как Вы проходите мимо параметров касательно при вызове статического метода с помощью отражения?

Проблема на самом деле в ваших 2 . местах, где вы должны иметь :. Если предположить , позиция не меняется, то у вас есть целый ряд вариантов:

WITH N AS
    (SELECT N
     FROM (VALUES (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL)) N (N) ),
Tally AS
    (SELECT TOP 200
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
     FROM N N1,
          N N2,
          N N3)
SELECT S.YourDate,
       TRY_CONVERT(datetime2(7), S.YourDate, I) AS ConvertedDate,
       I AS StyleCode
FROM Tally
     CROSS APPLY (VALUES ('21-DEC-17 11.09.52.020000 AM')) V(YourDate)
     CROSS APPLY (VALUES (STUFF(STUFF(V.YourDate, 13, 1, ':'), 16, 1, ':'))) S(YourDate)
WHERE TRY_CONVERT(datetime2(7), S.YourDate, I) IS NOT NULL;

Правка: фактически, если вы измените эти 2 ., вы не сможете даже не нужен код стиля, по крайней мере, на моем экземпляре и языке; но я предполагаю, что со значением типа DEC вы используете английскую производную:

SELECT S.YourDate,
       TRY_CONVERT(datetime2(7), S.YourDate) AS ConvertedDate
FROM (VALUES ('21-DEC-17 11.09.52.020000 AM')) V (YourDate)
     CROSS APPLY (VALUES (STUFF(STUFF(V.YourDate, 13, 1, ':'), 16, 1, ':'))) S (YourDate);
12
задан JaredPar 24 April 2009 в 16:54
поделиться

2 ответа

Для получения опорного параметра (или из в C #), отражение будет копировать новое значение в массив объектов в том же положении, что и исходный параметр. Вы можете получить доступ к этому значению, чтобы увидеть измененную ссылку.

public class Example {
  public static void Foo(ref string name) {
    name = "foo";
  }
  public static void Test() {
    var p = new object[1];
    var info = typeof(Example).GetMethod("Foo");
    info.Invoke(null, p);
    var returned = (string)(p[0]);  // will be "foo"
  }
}
16
ответ дан 2 December 2019 в 19:55
поделиться

Если вы позвоните Type.GetMethod и будете использовать BindingFlag из BindingFlags.Static , он не найдет ваш метод. Снимите флаг или добавьте BindingFlags.Public , и он найдет статический метод.

public Test { public static void TestMethod(int num, ref string str) { } }

typeof(Test).GetMethod("TestMethod"); // works
typeof(Test).GetMethod("TestMethod", BindingFlags.Static); // doesn't work
typeof(Test).GetMethod("TestMethod", BindingFlags.Static
                                     | BindingFlags.Public); // works
1
ответ дан 2 December 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: