visual que net mejor entre diferencia descargar con caracteristicas asp c# vb.net nothing

que - visual c#



C#vs VB.NET-Manejo de estructuras nulas (5)

Además, las estructuras son tipos de valor (muy parecido a int, char, etc.) y, por lo tanto, no aceptan nulos.

Me encontré con esto y me preguntaba si alguien podría explicar por qué esto funciona en VB.NET cuando esperaría que falle, al igual que en C #

//The C# Version struct Person { public string name; } ... Person someone = null; //Nope! Can''t do that!! Person? someoneElse = null; //No problem, just like expected

Pero luego en VB.NET ...

Structure Person Public name As String End Structure ... Dim someone As Person = Nothing ''Wha? this is okay?

¿Nada es lo mismo que nulo ( Nothing! = Null - LOL?) , ¿O se trata de formas diferentes de manejar la misma situación entre los dos idiomas?

¿Por qué o qué se maneja de manera diferente entre los dos que hace que esto esté bien en uno, pero no en el otro?

[Actualizar]

Teniendo en cuenta algunos de los comentarios, me equivoqué un poco más con esto ... parece como si realmente tuvieras que usar Nullable si quieres permitir que algo sea nulo en VB.NET ... así que por ejemplo ...

''This is false - It is still a person'' Dim someone As Person = Nothing Dim isSomeoneNull As Boolean = someone.Equals(Nothing) ''false'' ''This is true - the result is actually nullable now'' Dim someoneElse As Nullable(Of Person) = Nothing Dim isSomeoneElseNull As Boolean = someoneElse.Equals(Nothing) ''true''

Muy raro...


Debido a que una estructura se compone posiblemente de varios tipos diferentes (no un solo tipo de valor, sino un posible compuesto de varios tipos diferentes), preguntar si es "Nada" rompería la lógica del uso de "Nada". Nada prueba de manera diferente según el tipo que está probando y, por lo tanto, un tipo complejo no se adhiere a la lógica del uso de "Nada". Sin embargo, para este tipo de prueba, es decir, con una estructura que tiene todos sus miembros componentes en sus respectivos valores "Nada", usamos la función "No es nada". Por ejemplo:

Public Class Employees Public Structure EmployeeInfoType Dim Name As String '' String Dim Age as Integer '' Integer Dim Salary as Single '' Single End Structure Private MyEmp as New EmployeeInfoType Public Function IsEmployeeNothing(Employee As EmployeeInfoType) As Boolean If **IsNothing**(Employee) Then Return True Else Return False End If End Function End Class


Si mal no recuerdo, ''Nothing'' en VB significa "el valor predeterminado". Para un tipo de valor, ese es el valor predeterminado, para un tipo de referencia, que sería nulo. Por lo tanto, no asignar nada a una estructura, no es un problema en absoluto.


Traté de buscarlo en MSDN pero no pude encontrar nada relevante en el lado de VB. Al buscar "struct" en C #, claramente devuelve que es un tipo de valor y no puede asignarse nulo ya que ... es un valor.

Sin embargo, al buscar en la palabra clave "Estructura" de VB.NET, no dice "Tipo de valor". En cambio, dice

La instrucción Structure define un tipo de valor compuesto que puede personalizar.

Entonces ... ¿objeto?

Esa sería mi suposición. Me gustaría tener referencias a este comportamiento pero no pude encontrar ninguno.


Nothing es más o menos equivalente al default(T) para el tipo relevante. (Simplemente marcado, y esto también se aplica a las cadenas, es decir, Nothing es una referencia nula en el contexto de cadenas).