Q: Могу ли я получить доступ к значениям свойств plugin.json
? Если да, то как я могу получить доступ к свойству maxDataPoints
с моего контроллера?
A: Вы можете получить только некоторые значения свойств в plugin.json
. Эти значения можно найти в классе PluginMeta
, его экземпляр можно найти в переменной instanceSettings.meta
класса Datasource
. Пример
К сожалению, свойство maxDataPoints
не относится к и не является одним из тех свойств, к которым вы можете иметь доступ.
Если у вас есть действительный use-case
, вы можете попробовать отправить запрос на извлечение, чтобы попросить команду Grafana раскрыть его для вас.
Этот фрагмент серверного кода Grafana e определяет, что делается доступным для клиента из всех plugin.json
. И да, если вы хотите выставить свойство maxDataPoint
, вам придется расширить этот код.
Мне нравится if ((item.Rate ?? 0) == 0) { }
Обновление 1:
Вы могли также определить дополнительный метод как:
public static bool IsNullOrValue(this double? value, double valueToCheck)
{
return (value??valueToCheck) == valueToCheck;
}
И использование это как это:
if(item.IsNullOrValue(0)){}
//, но Вы не добираетесь очень от него
Используя дженерики:
static bool IsNullOrDefault<T>(T value)
{
return object.Equals(value, default(T));
}
//...
double d = 0;
IsNullOrDefault(d); // true
MyClass c = null;
IsNullOrDefault(c); // true
, Если T
это , ссылочный тип , value
будет по сравнению с null
(default(T)
), иначе, если T
будет value type
, скажем, удвойтесь, default(t)
0d, поскольку bool false
, поскольку символ '\0'
и так далее...
Это - действительно просто расширение принятого ответа Freddy Rios только с помощью Дженериков.
public static bool IsNullOrDefault<T>(this Nullable<T> value) where T : struct
{
return default(T).Equals( value.GetValueOrDefault() );
}
public static bool IsValue<T>(this Nullable<T> value, T valueToCheck) where T : struct
{
return valueToCheck.Equals((value ?? valueToCheck));
}
ПРИМЕЧАНИЕ мы не должны проверять значение по умолчанию (T) на пустой указатель, так как мы имеем дело или с типами значения или со структурами! Это также означает, что мы можем безопасно предположить, что T valueToCheck не будет пустым; Помнить здесь это T? краткий Nullable< T> таким образом путем добавления расширения Nullable< T> мы получаем метод в интервале?, дважды?, bool? и т.д.
Примеры:
double? x = null;
x.IsNullOrDefault(); //true
int? y = 3;
y.IsNullOrDefault(); //false
bool? z = false;
z.IsNullOrDefault(); //true
Я соглашаюсь с использованием?? оператор.
, Если Вы имеете дело со строковым использованием если (Строка. IsNullOrEmpty (myStr))
там лучший путь?
ну, при реальном поиске лучшего пути можно, вероятно, добавить другой слой абстракции сверх Уровня. Хорошо вот что-то, что я просто придумал использование Шаблона разработки Nullable.
using System; using System.Collections.Generic; namespace NullObjectPatternTest { public class Program { public static void Main(string[] args) { var items = new List { new Item(RateFactory.Create(20)), new Item(RateFactory.Create(null)) }; PrintPricesForItems(items); } private static void PrintPricesForItems(IEnumerable items) { foreach (var item in items) Console.WriteLine("Item Price: {0:C}", item.GetPrice()); } } public abstract class ItemBase { public abstract Rate Rate { get; } public int GetPrice() { // There is NO need to check if Rate == 0 or Rate == null return 1 * Rate.Value; } } public class Item : ItemBase { private readonly Rate _Rate; public override Rate Rate { get { return _Rate; } } public Item(Rate rate) { _Rate = rate; } } public sealed class RateFactory { public static Rate Create(int? rateValue) { if (!rateValue || rateValue == 0) return new NullRate(); return new Rate(rateValue); } } public class Rate { public int Value { get; set; } public virtual bool HasValue { get { return (Value > 0); } } public Rate(int value) { Value = value; } } public class NullRate : Rate { public override bool HasValue { get { return false; } } public NullRate() : base(0) { } } }
Вы пример кода перестанете работать. Если obj является пустым тогда obj. ToString () приведет к исключению нулевой ссылки. Я закоротил бы, сокращает процесс и проверку на пустой указатель obj в начале Вашей функции помощника. Относительно Вашего фактического вопроса, каков тип, который Вы проверяете на пустой указатель или нуль? На Строке существует большая функция IsNullOrEmpty, кажется мне, это было бы большим использованием дополнительных методов для реализации метода IsNullOrZero на интервале? ввести.
Редактирование: Помните,'?' просто сахар компилятора для типа INullable, таким образом, Вы могли, вероятно, взять INullable, поскольку parm и затем jsut сравнивают его с пустым указателем (parm == пустой указатель) и если не пустой выдерживают сравнение с нулем.
public static bool nz(object obj)
{
return obj == null || obj.Equals(Activator.CreateInstance(obj.GetType()));
}
class Item{
bool IsNullOrZero{ get{return ((this.Rate ?? 0) == 0);}}
}
Не забывайте для строк, можно всегда использовать:
String.IsNullOrEmpty(str)
Вместо:
str==null || str==""