소리는 간단하지만 작동하지 않습니다. 이 예제에서는 3 필드의 값을 4로 설정하려고합니다. 나는 ....byRef와 같이 ParamArray 값을 처리 할 수있는 방법이 있습니까?
Dim str1 As String = "1"
Dim str2 As String = "2"
Dim str3 As String = "3"
Dim str4 As String = "4"
str2 = str1
str3 = str1
str4 = str1
을 같은 것을 할 수 ...하지만 (그래, 나도 알아, 비주얼 베이직 대부분의 경우 말의이다) 가지 말의입니다. 한 줄로 줄이기 위해 사용할 수있는 무언가를 갖고 싶습니다. 그래서이 확장 메서드를 만들었습니다.
Module Module1
Sub Main()
Dim str1 As String = "1"
Dim str2 As String = "2"
Dim str3 As String = "3"
Dim str4 As String = "4"
Console.WriteLine("Extension method return value = {0}", str1.SetEqual(str2, str3, str4))
Console.WriteLine("String 1 = {0}", str1)
Console.WriteLine("String 2 = {0}", str2)
Console.WriteLine("String 3 = {0}", str3)
Console.WriteLine("String 4 = {0}", str4)
Console.ReadKey()
End Sub
<System.Runtime.CompilerServices.Extension()> _
Public Function SetEqual(Of T)(ByVal source As T, _
ByVal ParamArray targets() As T) _
As T
For _index = 0 To targets.Length - 1
targets(_index) = source
Console.WriteLine("Target Value {0} = {1}", _index, targets(_index))
Next
Return source
End Function
End Module
직설적 인 것으로 보입니다. 맞습니까? 출력은 다음과 같습니다.
Target Value 0 = 1
Target Value 1 = 1
Target Value 2 = 1
Extension method return value = 1
String 1 = 1
String 2 = 2
String 3 = 3
String 4 = 4
반환 값으로 매개 변수 값이 업데이트되지 않았습니다! 함수에있는 것처럼 마지막 값이 모두 "1"이 될 것으로 예상했습니다.
이렇게 업데이트 할 수있는 ParamArray 컬렉션을 얻을 수있는 방법이 있습니까? ParamArray는 ByVal로 선언해야하지만 String과 같은 참조 유형을 사용하면 포인터의 사본 만 만들고 기본 값을 변경할 수 없습니까?
내가 원하는 것을 얻는 더 좋은 방법이 있습니까? (C#은이 옵션이 아닙니다.)
오, 조이. 그것이 내가 두려워했던 것입니다. 감사합니다 Jared. – StingyJack