C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Lengthのバイト版


(過去ログ 96 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■57179 / inTopicNo.1)  Lengthのバイト版
  
□投稿者/ TAKE (21回)-(2011/02/16(Wed) 15:55:08)

分類:[C#] 

文字数取得するときに

string s = 'あいうえお';
int i = s.Length();

というような感じで使いますが
バイト文字数を取得するメソッドを自作したときに
Lengthと同じように

int i = s.LengthByte();

のような使い方ができるように作成することはできますか?
わかる方ご教授よろしくお願いいたします。
引用返信 編集キー/
■57184 / inTopicNo.2)  Re[1]: Lengthのバイト版
□投稿者/ shu (443回)-(2011/02/16(Wed) 16:12:04)
No57179 (TAKE さん) に返信

エンコードを何にするかでByte数は変わります。
Encoding.GetByteCountで取得出来ます。


> int i = s.LengthByte();

この記述で取得するにはLengthByteを拡張メソッドとして定義する必要があります。
エンコードが指定されないので標準ではこのエンコードを使うとかにするか
どっかから取得する必要があります。エンコード指定の引数付き版もあったほうが良いかと思います。
引用返信 編集キー/
■57204 / inTopicNo.3)  Re[2]: Lengthのバイト版
□投稿者/ TAKE (24回)-(2011/02/17(Thu) 10:59:56)
拡張メソッドの勉強のため
試しに作っていましたが
上手くいきません。

(1)の行でエラーになります。
メソッド グループ 'LengthByte' を非デリゲート型 'int' に変換することはできません。このメソッドを呼び出すことはできません。
とエラー内容が出ますが
非デリゲート型intの意味がわかりません。
わかる方お願いいたします。



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace WindowsFormsApplication3
{

static class String
{

public static int LengthByte(this string Str)
{
byte[] bytesData;
string StringCode = "Shift_JIS";

bytesData = System.Text.Encoding.GetEncoding(StringCode).GetBytes(Str);

int rtn = bytesData.Count();
return rtn;
}
}



public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
string a = "aiueo";
int b = 0;

b = a.Length;

b= a.LengthByte; // (1)

}
}
}

引用返信 編集キー/
■57205 / inTopicNo.4)  Re[3]: Lengthのバイト版
□投稿者/ Hongliang (759回)-(2011/02/17(Thu) 11:08:09)
2011/02/17(Thu) 11:08:38 編集(投稿者)

> b= a.LengthByte; // (1)
C# では、メソッド呼び出しの際に引数無しであっても括弧を省略することはできません。
そして拡張メソッドもメソッドの一種です。

> bytesData = System.Text.Encoding.GetEncoding(StringCode).GetBytes(Str);
> int rtn = bytesData.Count();
Encoding クラスには GetByteCount メソッドがあります。
引用返信 編集キー/
■57235 / inTopicNo.5)  Re[4]: Lengthのバイト版
□投稿者/ TAKE (25回)-(2011/02/18(Fri) 09:04:00)
解決しました。
ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -