2011-08-31 8 views
6

La razón por la que estoy pidiendo es porque escribí un método de extensión para utilizar en Silverlight sólo para descubrir que la función mágicamente comenzó a trabajar para la luz de plata.¿Existe una razón por la DLL del sistema es diferente en Silverlight y # otras bibliotecas de C

Ejemplo

string sentence = "I am a sentence that has some words"; 
sentence.Contains("N"); //would return false, silverlight true 
sentence.Contains("n"); //would return true, silverlight true 

Por qué hay un sistema DLL especial en el marco de Silverlight que hace el comparsion como caso insenstive?

se han topado con esto para un montón de métodos, que es un poco molesto que o bien actúan diferente o se acaba perdiendo en general.

+0

estoy irritado sobre todo que hay diferencias entre locos en Sistema digamos: c: \ Archivos de programa (x86) \ Referencia Asambleas \ Microsoft \ Framework \ Silverlight \ v4.0 \ system.dll C: \ Program archivos (x86) \ Referencia Asambleas \ Microsoft \ Framework \ .NETFramework \ v4.0 \ System.dll ambos son del sistema y System.String.Contains() actúa diferente, es más una molestia que cualquier otra cosa pero sigue corriendo en pequeñas cosas como esta. –

+1

Acabo de probar eso en un proyecto estándar de Silverlight; devolvió 'falso' como se esperaba –

Respuesta

3

La razón por la que estoy preguntando es porque escribí un método de extensión para usar en Silverlight solo para descubrir esa característica que mágicamente comenzó a funcionar para la luz plateada.

hay un método public bool string.Contains(string) para todas las versiones de .NET de 2,0 en adelante (2.0, 3.0, 3.5, 4.0, SL 3/4 WP 7.0/7.1).

Es interesante observar que la versión SL solo aparece en la lista de SL 3/4 - ¿es posible actualizar desde una solución 2.0? Eso podría luego dar cuenta de ello. De lo contrario, un método definido siempre tiene prioridad sobre un método de extensión, por lo que nunca debe llamarse su método de extensión (podemos excluir .NET 1.1 ya que el compilador C# 1.2 no incluye métodos de extensión).

para .NET 2.0 documentos MSDN esto como:

Este método realiza una palabra (mayúsculas y minúsculas y la cultura y minúsculas) búsqueda usando la cultura actual. La búsqueda comienza en la posición del primer carácter de esta secuencia y continúa hasta la última posición del carácter.

Todas las demás versiones (incluyendo Silverlight) se enumeran como:

Este método realiza un ordinal (mayúsculas y minúsculas y cultura insensible a) comparación. La búsqueda comienza en la posición del primer carácter de esta secuencia y continúa hasta la última posición del carácter.

Si usted está viendo otro modo (por favor agudos-cheque), que podría ser un error de marco ... pero me siento cautelosamente esperando una explicación más sencilla.

+0

Sí, vi que comenzó en las versiones 3 y 4. Pero supongo que mi pregunta es más por qué no dieron. ¿Contiene la misma insensibilidad a la versión que no es Silverlight para mantener la coherencia? –

+1

@Cubicle er ... ¿lo hicieron? al menos eso es lo que dice MSDN. –

+1

@Cubicle I aclaró las citas de MSDN; en .NET 2.0 distingue entre mayúsculas y minúsculas, es sensible al cultivo; en ** todo lo demás ** es sensible a mayúsculas y minúsculas, insensible a la cultura. De todas formas, debe ser sensible a las mayúsculas y minúsculas –

Cuestiones relacionadas