.Cast(Of Double) Extension Method Not Working In A Particular Situation ?
Sep 8, 2011
.Cast(Of Double) extension method not working in a particular situation.However I can get my own extension method .CastToDouble working.Would you call this a Framework bug?see the commented out line of code in the code below.Similar code posted in my last post in this thread: http:[url].....
Option Strict On
Option Explicit On
Option Infer Off[code]......
I am trying to compare the contents of 2 collections in a unit test in .NET using MSTEST. To make things simple, instead of having to .Sort() and then loop through the collection and compare items one at a time, I've found the new and very cool .Intersect Extension method.
However, now that I have a test which needs to be case-sensitive, it breaks. I've tried sending Intersect's second parameter StringComparer.Ordinal,StringComparer.InvariantCulture, and StringComparer.CurrentCulture... no luck..
I have a custom list that inherits Generic.List and it has a method for deselecting all of the members named DeselectAll It has looked like this for a few weeks and has worked fine.
Public Sub DeselectAll() MyBase.ForEach(Function(p As Publipostable) p.ModeEnvoiChoisi = Nothing) End Sub
Today, it stopped working ?!? I reverted to an earlier version using delegates and that works fine...
Public Sub DeselectAll() MyBase.ForEach(AddressOf DeselectModeEnvoi) End Sub
[code]....
Edit: Stopped Working meaning it no longer sets the property p.ModeEnvoiChoisi to Nothing on each item in the list. The DeselectAll method gets called, but all the items retain their previous values...
Why would I use an extension method instead of just creating non-extension sub or function?
For ex, I could have an extension function called IsNullOrEmptyOrAllSpaces on String, which does a check as its name implies. Or I can write a stand alone function that does the same thing. Other than having the extension show up in Intellisense, is there any advantage? Is a call to the extension quicker/more efficient than a call to a regular function?
I saw this post and I want to know if this is possible in VB. So like extension method, do extension properties exists in VB.Net? Here I've read they do, but cannot find any examples.
Extension methods are useful for types that you don't own and can't/don't want to derive from and extend (e.g. reference types and interfaces). Obviously, interfaces should be kept as short and to-the-point as possible, so extension methods for interfaces are particularly useful (e.g. LINQ).For classes, especially classes that you own, they're still useful - but I'm wondering how you determine what should be an extension method or what should be a method in the class itself.Personally, every time I think about it, I keep going round in circles with the following thoughts:If it's useful enough, it should be in the class.It's not part of the core responsibility of the class, it should be an extension method - but if it's useful enough, surely it should be the responsibility of the class...
I would like to cast a double to an integer, but rather than keep the numerical value the same I want to keep the bit pattern the same (this is for a compression algorithm), is this already possible in VB.net, or would I need to try and come up with my own method for doing this?
I using Microsoft.Office.Interop.Excel I get returned a 2D array of type object[,] which contains double for elements. Note that the index lower bound is 1 instead of the default 0, but I can deal with that easily. How can nicely convert the array into double[,] using .NET 3.5. (by nicely I mean concise, or compact).
I am currently going through a book on beginning VB,NET and am trying to complete one of the exercises in the book. I have created a function that validates user entries to check that they are numeric and within certain a range.If text value is entered into the textbox I get an exception error saying that
I know how to add extension method Like (Date.Now.MyExtensionFunction()),But I can NOT find how to add such methods and functions in class (not in module) with vb.net
I ran into a strange issue over the weekend while I was working on an asp.net mvc project in vb.net. I created an extension method to convert an integer to the corresponding month it is associated with. I tested the extension method in a console application so I know it is working.
In my asp.net mvc project I have a view and want to call the extension method but I get an error that the extension method is not recognized. I imported the namespace it was contained in and still couldn't shake the error.
I created a module to add some Extension Methods to a Class. This Class inherits from another parent Class. In the code of my Extension Methods, I would like to refer to the base Class using MyBase. This doesn't seems to be allowed (Error message : "'MyBase' is not valid within a Module.")
I am starting to play with extension methods and i came across with this problem:In the next scenario i get a: "extension method has a type constraint that can never be satisfied"
Public Interface IKeyedObject(Of TKey As IEquatable(Of TKey)) ReadOnly Property InstanceKey() As TKey End Interface
I'm trying to create an extension method that returns an IEqualityComparer based on a lambda function. Heres the extension method:
<Extension()> Public Function Comparer(Of T)(Func As Func(Of T, T, Boolean)) As IEqualityComparer(Of T) Return New GenericComparer(Of T)(Func) End Function
Public Enum Direction Left Right Top Bottom End Enum
And Sometimes I need to get the inverse, so it seems nice to write:
SomeDirection.Inverse()
But I can't put a method on an enum! However, I can add an Extension Method (VS2008+) to it.
In VB, Extension Methods must be inside Modules. I really don't like modules that much, and I'm trying to write a (moderately) simple class that I can share in a single file to be plugged into other projects.
Modules can only reside in the file/namespace level so I have one in the bottom of the file now:
Public Class MyClass '...' End Class
[Code]....
It works, and "if it ain't broke, don't fix it", but I'd love to know if I'm doing it wrong and there's a better way with less boilerplate. Maybe in .NET 4?
Finally, I know I could write a structure that behaves like an enum, but that seems even more backwards.
I've created a MyFunc extension (in Module Extensions) for all the base types as well as generic arrays, ICollection(Of T) and Dictionary(Of String,T):
Function MyFunc(Of T)(a() As T) As String Function MyFunc(Of T)(collection As ICollection(Of T)) As String Function MyFunc(Of T)(dict As Dictionary(Of String,T)) As String
Can I access values in application settings of web.config in extension method?I have the below code but it is not working:
<Extension()> _ Public Function DocCountExt(ByVal value As Collection) As Integer Dim maxOffSet As Integer = Integer.Parse(ConfigurationManager.AppSettings(APP_SETTINGS_OFFSET)) return maxOffSet End Function
i want to extend the integer class to a method that increments current integer value by 2. I create a console application and a second module which contains the extension method.
and everything works fine. The extension method module can be imported to any other project (Project-->add existing item --> select the vb file that contains the extension method module) and works fine too. But the code is accessible to other users. Is there a method to convert the extension method module to a dll and adding it to other projects as a reference. I tried to do it with creating a class project and pasting the code of the extension method module and compile the dll and then added it as reference to another project and imported the class with the keyword imports, but it didn't work.
I wanna create extension method for IEnumerable(Of FileSystemInfo). However, compiler says "'Sort' is not a member of'System.Collections. Generic. IEnumerable(Of System.IO.FileSystemInfo)". What is strange is that IntelliSense shows this method. Where's error? [code]
In our .aspx pages, we've got lots of this code:<%= CType(GetLocalResourceObject("key"), String)) %>I'd like to add an extension method that I can use in our .aspx views that allows me to do this:<%= GetLocalResourceString("key") %>The code isn't working, though:Imports System.Runtime.CompilerServices
I like to create an extension method to Image.FromStream Public Shared Function FromStream(ByVal stream As System.IO.Stream) As System.Drawing.Image
With possibility to cancel processing like Public Shared Function FromStream(ByVal stream As System.IO.Stream, ByVal CloseTask As ManualResetEvent) As System.Drawing.Image
In VB.Net you can easily get the text value of the first child element of an XElement like so:Dim sChildValue = xeParent.<MyChild>.Value()Of course that syntax is not supported in C#, but it produces the same IEnumerable(Of XElement) result as the Elements() method. So we can rewrite the above like so:
Dim sChildValue = xeParent.Elements("MyChild").Value()This Value() extension method is handy because often you are working with small XML documents and you just want the first node that matches. (One thing that annoys me about this method is that it seems to return Nothing/null if the IEnumerable list is empty due to the specified element not being found. To work around this I have created my own ValueOrBlank() method that returns an empty string in that situation instead.)
My problem is that I can't do the same thing in C#:var sChildValue = xeParent.Elements("MyChild").Value(); // won't compile, can't find Value() method
I checked my references/imports and they match the VB.Net project where the same call works. Fortunately I am able to use my custom ValueOrBlank() extension method to accomplish the same thing. But I'm curious as to what's missing in my C# project. I tried right-clicking on the Value() method call in Visual Studio and clicking "Go To Definition" to see if the Object Browser could tell me where the extension method is kept, but it just shows the System.String class. Does that mean this is one of those sneaky VB.Net-only features that the compiler itself supports, like the XML Axis < MyChild > syntax?
I am wondering whether I can use DataContractJsonSerializer to serialize a Structure type, or does it have to be a reference/Class type? I have the following code:
<Extension()> Public Function ToJSON(ByVal target As Object) As String Dim serializer = New System.Runtime.Serialization.Json.DataContractJsonSerializer(target.GetType) Using ms As MemoryStream = New MemoryStream() serializer.WriteObject(ms, target) ms.Flush()
[Code]...
And yet if I call it on a Structure type, such as a KeyValuePair(Of T1, T2), I get the following error:
Public member 'ToJSON' on type 'KeyValuePair(Of String,Object)' not found.