回答編集履歴

2

補足として追記

2017/11/06 07:40

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -30,9 +30,11 @@
30
30
 
31
31
 
32
32
 
33
- 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。
33
+ 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。
34
34
 
35
+
36
+
35
- 元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではなょうか
37
+ あるいは`textBox1.Text = new string(p_str);` 1行でいいかもれません
36
38
 
37
39
 
38
40
 

1

質問内容に合致するよう追記

2017/11/06 07:39

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -23,3 +23,81 @@
23
23
  }
24
24
 
25
25
  ```
26
+
27
+ ---
28
+
29
+ **追記**:理由があってポインターを使っているとのことでしたので追記しました。
30
+
31
+
32
+
33
+ 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。
34
+
35
+ 元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。
36
+
37
+
38
+
39
+ 質問者様の使われ方に合致しているか分かりませんが、以下、例です。元のstr を編集してtextBox1にセットし、その文字列をもとにstr2を生成して編集し、textBox2にセットします。
40
+
41
+ ```C#
42
+
43
+ private unsafe void button1_Click(object sender, EventArgs e)
44
+
45
+ {
46
+
47
+ string str = "1234567890";
48
+
49
+ string str2 = null;
50
+
51
+
52
+
53
+ fixed (char* p_str = str)
54
+
55
+ {
56
+
57
+ // ポインターを経由してstrを編集
58
+
59
+ *(p_str + 0) = 'A';
60
+
61
+ *(p_str + 1) = 'B';
62
+
63
+
64
+
65
+ // 編集後のstrの内容を用いてSystem.String(char *)のコンストラクタで生成
66
+
67
+ str2 = new string(p_str);
68
+
69
+ fixed (char* p_str2 = str2)
70
+
71
+ {
72
+
73
+ // str2をポインター経由で編集
74
+
75
+ *(p_str2 + 2) = 'C';
76
+
77
+ *(p_str2 + 3) = 'D';
78
+
79
+ }
80
+
81
+ }
82
+
83
+
84
+
85
+ // str == "AB34567890"
86
+
87
+ textBox1.Text = str;
88
+
89
+
90
+
91
+ // str2 == "ABCD567890"
92
+
93
+ textBox2.Text = str2;
94
+
95
+ }
96
+
97
+ ```
98
+
99
+ 以下のようになります。
100
+
101
+
102
+
103
+ ![イメージ説明](235e940948670da258c933cb4f62f767.png)