Ich entwickle F#
Anwendung .net 4.6.1
auf VS2015
. Ich habe Methoden:F # Methode gibt null statt Option
type CommonHelper =
static member SideEffectOnNull act x = if x = null then act(); x else x
static member SideEffectOnNotNull act x = if x <> null then act(); x else x
...
static member GetPerformanceCounter (fname: CounterFullName) =
let getCounterInternal (counterFullName: CounterFullName) =
Log.Information("Getting counter: {category}\\{name}\\{instance} ", counterFullName.Category, counterFullName.Name, counterFullName.Instance)
let receivedCategory = PerformanceCounterCategory.GetCategories().FirstOrDefault(fun x -> String.Equals(x.CategoryName, counterFullName.Category.Category, StringComparison.InvariantCultureIgnoreCase))
if receivedCategory = null then
Serilog.Log.Warning ("Category not found: {category}", counterFullName.Category); null
else
let receivedCounters = PerforrmanceCounterProxy.GetPerformanceCountersFromCategoryOrNull counterFullName.Instance receivedCategory
if receivedCounters = null then
Log.Warning ("Instance not found {name}(instance: {instance}) in category {category}", counterFullName.Name, counterFullName.Instance, counterFullName.Category); null
else
receivedCounters.FirstOrDefault(fun y -> String.Equals(y.CounterName, counterFullName.Name.Name, StringComparison.InvariantCultureIgnoreCase))
|> CommonHelper.SideEffectOnNull (fun unit -> Log.Warning ("Name {name}(instance: {instance}) not found for category {category}", counterFullName.Name, counterFullName.Instance, counterFullName.Category))
getCounterInternal fname
|> CommonHelper.SideEffectOnNull (fun unit ->Log.Warning("Getting counter failed: {category}\\{name}\\{instance}", fname.Category, fname.Name, fname.Instance))
|> CommonHelper.SideEffectOnNotNull (fun unit ->Log.Information("Getting Counter secceed: {category}\\{name}\\{instance}", fname.Category, fname.Name, fname.Instance))
|> (fun x -> if x = null then None else Option.Some(x))
Aber wenn ich diese Methode aufrufen i erhalten null
statt option
. Was mache ich falsch?
Meine Vermutung - das Problem im Zusammenhang mit "Visual Studio 2015". Da die Geschäftslogik gut funktioniert, denke ich, dass die VS2015-Benutzeroberfläche falsche Informationen anzeigt. – burzhuy
Ich habe den Standardwert für diesen Typ beim Durchlaufen angezeigt - "default (T)" im Falle von Werttypen und "null" für Referenztypen. – Asti